主鍵約束:唯一,不重復(fù),不能為空? primary key
東勝網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司2013年至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
一個表中有且只有一個主鍵約束
1.創(chuàng)建表的同時創(chuàng)建主鍵約束
格式一:
create table 表名(
列名1? 數(shù)據(jù)類型 primary key,
列名2 數(shù)據(jù)類型
);
主鍵約束名字的寫法: PK_列名
格式二:
create table 表名(
列名1 數(shù)據(jù)類型,
列名2 數(shù)據(jù)類型,
constraint? 主鍵約束的名字? primary key(列名1)
);
格式三:
create table 表名(
列名1 數(shù)據(jù)類型,
列名2 數(shù)據(jù)類型,
primary key(列名1)
);
2.針對已經(jīng)存在的表,添加主鍵約束
格式一:
alter table 表名 modify 列名 數(shù)據(jù)類型 primary key;
格式二:
alter table 表名 add primary key(列名);
格式三:
alter table 表名 add constraint 主鍵約束的名字 primary key(列名);
3.刪除主鍵約束
格式:alter table 表名 drop primary key;
這是一項新功能,用于指定在插入或更新到一行之前檢查值的條件。如果表的任何行的搜索條件的結(jié)果為 FALSE,則約束可能返回錯誤(但如果結(jié)果為 UNKNOWN 或 TRUE,則約束不會返回錯誤)。此功能開始在 MySQL 8.0.16 上運行,在以前的版本中,我們可以創(chuàng)建它,但它不起作用,這意味著支持語法,但不起作用。要牢記的使用規(guī)則:
AUTO_INCREMENT 自增列不允許使用
引用另一個表中的另一列不允許使用
存儲的函數(shù)和用戶定義的函數(shù)不允許使用
存儲過程和函數(shù)參數(shù)不允許使用
子查詢不允許使用
在外鍵中用于后續(xù)操作(ON UPDATE,ON DELETE)的列不允許使用
為下一條語句 INSERT,UPDATE,REPLACE,LOAD DATA 和 LOAD XML 評估此次監(jiān)測。此外,還會為 INSERT IGNORE,UPDATE IGNORE,LOAD DATA…IGNORE 和 LOAD XML…IGNORE 評估此監(jiān)測約束。對于這些語句,如果約束的評估結(jié)果為 FALSE,則會發(fā)生警告。插入或更新被跳過。
我們可以使用此功能在表中添加更多的邏輯,但是根據(jù)我以前作為程序員的經(jīng)驗,我不建議在表中添加邏輯,因為除非您無法訪問應(yīng)用程序代碼,否則很難找到或調(diào)試錯誤。
1.外鍵的作用,主要有兩個:
一個是讓數(shù)據(jù)庫自己通過外鍵來保證數(shù)據(jù)的完整性和一致性
一個就是能夠增加ER圖的可讀性
2.外鍵的配置
1)先創(chuàng)建一個主表,代碼如下:
#創(chuàng)建表student,并添加各種約束
create table student
(
id int primary key ,? #主鍵約束
name varchar(20)? ,? #唯一約束
age int NOT NULL, #非空約束
sex varchar(2) ,
address varchar(20) default '重慶'? #默認約束
) ;
再通過一個外鍵,創(chuàng)建一個分數(shù)表,這樣的話,就可以方便查詢。代碼如下:
#創(chuàng)建分數(shù)表
create table score
(
id int primary key ,
sid int ,
china int ,
history int,
english int,
constraint FK_sid foreign key(sid) references student(id)? #通過外鍵創(chuàng)建鏈接
) ;
創(chuàng)建外鍵的方法有很多,其中最常見創(chuàng)建外鍵的格式是:constraint FK_*** foreign key(**) references 鏈接的外表
刪除外鍵:
alter table drop foreign key '外鍵名'.
注意:
只有在定義外鍵時,用constraint 外鍵名 foreign key .... 方便進行外鍵的刪除
這是一項新功能,用于指定在插入或更新到一行之前檢查值的條件。如果表的任何行的搜索條件的結(jié)果為 FALSE,則約束可能返回錯誤(但如果結(jié)果為 UNKNOWN 或 TRUE,則約束不會返回錯誤)。此功能開始在 MySQL 8.0.16 上運行,在以前的版本中,我們可以創(chuàng)建它,但它不起作用,這意味著支持語法,但不起作用。要牢記的使用規(guī)則:
AUTO_INCREMENT 自增列不允許使用
引用另一個表中的另一列不允許使用
存儲的函數(shù)和用戶定義的函數(shù)不允許使用
存儲過程和函數(shù)參數(shù)不允許使用
子查詢不允許使用
在外鍵中用于后續(xù)操作(ON UPDATE,ON DELETE)的列不允許使用
為下一條語句 INSERT,UPDATE,REPLACE,LOAD DATA 和 LOAD XML 評估此次監(jiān)測。此外,還會為 INSERT IGNORE,UPDATE IGNORE,LOAD DATA…IGNORE 和 LOAD XML…IGNORE 評估此監(jiān)測約束。對于這些語句,如果約束的評估結(jié)果為 FALSE,則會發(fā)生警告。插入或更新被跳過。
我們可以使用此功能在表中添加更多的邏輯,但是根據(jù)我以前作為程序員的經(jīng)驗,我不建議在表中添加邏輯,因為除非您無法訪問應(yīng)用程序代碼,否則很難找到或調(diào)試錯誤。
4.4.7添加約束
語句格式:ALTER TABLE 表名ADD? CONSTRAINT? 約束名 約束類型(字段名)
上面語句格式中,“表名”指定要添加約束的是哪個表,“ADD CONSTRAINT”表示要在表中增加約束,其后的“約束名”是擬增加約束的名字,“約束類型”是擬增加約束的類型,其后括號里的“字段名”是指約束是在哪一個字段上建立起來的。
下面截圖中的“ALTER TABLE”語句在t_dept表中新增加了一個約束名為unidept的約束,它是在對字段deptno進行的唯一性約束。