一.數(shù)據(jù)完整性的分類
在關(guān)系模型中溺健,提供了實體完整性麦牺,參照完整性,用戶定義完整性鞭缭。
二.實體完整性
2.1什么是實體剖膳?
實體是一個數(shù)據(jù)對象,指的是客觀存在并可以相互區(qū)分的事物岭辣,比如學(xué)生吱晒,老師等。一個實體在數(shù)據(jù)庫中對應(yīng)的是一條記錄沦童。
2.2實體完整性在MySQL中實現(xiàn)
實體完整性在MySQL中的實現(xiàn)是通過主鍵約束和候選鍵約束實現(xiàn)的仑濒。
2.2.1主鍵約束
首先,我們來了解一下主鍵是什么:主鍵是表中的某一列或者多個列的組合偷遗。多個列就是復(fù)合主鍵墩瞳。
在MySQL中的主鍵必須保證一下幾個要求:
1.一個表只能有一個主鍵,主鍵可以復(fù)合但是只有一個氏豌。
2.唯一性喉酌,主鍵的值在一張表里面是不能重復(fù)是唯一的,而且不能為空泵喘。
3.最小化原則泪电,當(dāng)一個復(fù)合主鍵刪除掉復(fù)合的某一行后如果這個主鍵還是復(fù)合的,那么就是代表原來那個復(fù)合主鍵沒有滿足最小化原則纪铺。
2.2.2實現(xiàn)主鍵
使用關(guān)鍵字:primary key
方式一:單列主鍵
create table tb(
tb_pk int primary key
);
方式二:復(fù)合主鍵
create table tb(
tb_id int ,
tb_name varchar(10),
primary key (tb_id,tb_name)
);
2.2.3候選鍵約束
如果一張表中的某一個列可以唯一標(biāo)識這張表相速,又不含其他多于的屬性,那么他就是一個候選鍵鲜锚。比如學(xué)生的學(xué)號突诬。
同樣的候選鍵也是非空并且唯一值,候選鍵也支持復(fù)合芜繁。
2.2.4候選鍵與主鍵
表中主鍵只有一個但是候選鍵可以擁有多攒霹。
兩者都會創(chuàng)建索引,主鍵是priamry key索引浆洗,但是候選鍵是unique索引
2.2.5實現(xiàn)候選鍵
使用關(guān)鍵字unique:
create table tb(
tb_id int ,
tb_name varchar(10),
unique(tb_id,tb_name)
);
三.參照完整性
在現(xiàn)實世界中存在多個對應(yīng)的關(guān)系雏节,那么這個對應(yīng)關(guān)系就是參照完整性辫愉,也就是MySQL中的外鍵押赊。
3.1參照完整性的定義為(圖解):
3.2參照的完整性語法
關(guān)鍵字:foreign key
語法:
foreign key (本身表的列) references
從表表名(從表的主鍵)
on delete restrict | cascade | set null | no action
on update restrict | cascade | set null | no action
restrict :刪除或者更新時,在外間中出現(xiàn)的值操作失敗
cascade:將外鍵的值一同刪除或者更新
set null :刪除更新時外鍵的值被設(shè)置為空
例子首先說明有兩張表:
create table tb(
tb_id int ,
tb_name varchar(10),
foreign key (tb_id) references tb1(tb_id) on delete cascade on update cascade
);
create table tb1(
tb_id int primary key,
tb_name varchar(10),
unique(tb_id,tb_name)
);
3.3注意點
1.首先從表必須是存在的塔淤。
2.從表必須是主鍵被參照