數(shù)據(jù)完整性
1.域完整性:---------匹配完整性:非空肛度、缺省
字段/列
2.實(shí)體完整性:-------匹配完整性:主鍵兴想、唯一鍵
記錄/行
3.引用完整性:-------匹配完整性:外鍵
表與表之間
約束:constraint
MySQL中的約束分類
主鍵:primary key
唯一鍵:unique
非空:not null
缺省:default
外鍵:foreign key
主鍵岳遥、唯一鍵读串、外鍵都會(huì)自動(dòng)創(chuàng)建索引
主鍵:一個(gè)表只能有一個(gè)主鍵已旧,其可以對(duì)應(yīng)一個(gè)字段秸苗,也可以對(duì)應(yīng)多個(gè)字段(組合主鍵)
唯一鍵:也成為候選主鍵(跟主鍵的區(qū)別在于可以存儲(chǔ)null值)
外鍵:來(lái)源于主表的主鍵或唯一鍵(可允許為空,且其值必須在主表中出現(xiàn)過(guò))
創(chuàng)建約束
constraint 約束名 約束類型(字段名) references 主表(主鍵字段或唯一鍵字段)
創(chuàng)建外鍵約束
constraint 約束名 foreign key(對(duì)應(yīng)字段) references 主表(主鍵字段或唯一鍵字段)
創(chuàng)建組合主鍵
primary key (字段1,字段2)
對(duì)于已經(jīng)存在的表运褪,創(chuàng)建唯一鍵約束
alter table 表名 add constraint 約束名 unique(字段名);
刪除約束的數(shù)據(jù) 先刪除子表數(shù)據(jù)惊楼,再刪除主表數(shù)據(jù)
級(jí)聯(lián)刪除
on delete cascade
級(jí)聯(lián)更新
on update cascade
關(guān)掉mysql 外鍵約束
SET FOREIGN_KEY_CHECKS=0;
打開(kāi)mysql 外鍵約束
SELECT? @@FOREIGN_KEY_CHECKS;
刪除外鍵
注意:此語(yǔ)句在刪除外鍵后不能關(guān)聯(lián)刪除該外鍵自動(dòng)產(chǎn)生的約束
alter table 表名 drop foreign key 外鍵名稱;
刪除唯一鍵
注意:唯一鍵刪除后對(duì)應(yīng)的索引也會(huì)自動(dòng)刪除
alter table 表名 drop index 唯一鍵字段名;
刪除指定名稱的索引
alter table 表名 drop index 索引名稱;
提醒:對(duì)于有主外關(guān)聯(lián)的表玖瘸,刪除表中數(shù)據(jù),如果無(wú)刪除的級(jí)聯(lián)操作檀咙,那么刪除主表數(shù)據(jù)之前雅倒,必須先刪除從表對(duì)應(yīng)數(shù)據(jù)