數據完整性約束(1)——實體完整性、參照完整性
一.數據完整性的分類
在關系模型中,提供了實體完整性,參照完整性,用戶定義完整性。
二.實體完整性
2.1什麽是實體?
實體是一個數據對象,指的是客觀存在並可以相互區分的事物,比如學生,老師等。一個實體在數據庫中對應的是一條記錄。
2.2實體完整性在MySQL中實現
實體完整性在MySQL中的實現是通過主鍵約束和候選鍵約束實現的。
2.2.1主鍵約束
首先,我們來了解一下主鍵是什麽:主鍵是表中的某一列或者多個列的組合。多個列就是復合主鍵。
在MySQL中的主鍵必須保證一下幾個要求:
1.一個表只能有一個主鍵,主鍵可以復合但是只有一個。
2.唯一性,主鍵的值在一張表裏面是不能重復是唯一的,而且不能為空。
3.最小化原則,當一個復合主鍵刪除掉復合的某一行後如果這個主鍵還是復合的,那麽就是代表原來那個復合主鍵沒有滿足最小化原則。
2.2.2實現主鍵
使用關鍵字:primary key
方式一:單列主鍵
create table tb( tb_pk int primary key );
方式二:復合主鍵
create table tb( tb_id int , tb_name varchar(10), primary key (tb_id,tb_name) );
2.2.3候選鍵約束
如果一張表中的某一個列可以唯一標識這張表,又不含其他多於的屬性,那麽他就是一個候選鍵。比如學生的學號。
同樣的候選鍵也是非空並且唯一值,候選鍵也支持復合。
2.2.4候選鍵與主鍵鍵
表中主鍵只有一個但是候選鍵可以擁有多。
兩者都會創建索引,主鍵是priamry key索引,但是候選鍵是unique索引
2.2.5實現候選鍵
使用關鍵字unique:
create table tb( tb_id int , tb_name varchar(10), unique(tb_id,tb_name) );
三.參照完整性
在現實世界中存在多個對應的關系,那麽這個對應關系就是參照完整性,也就是MySQL中的外鍵。
3.1參照完整性的定義為(圖解):
3.2參照的完整性語法
關鍵字:foreign key
語法:
foreign key (本身表的列) references
從表表名(從表的主鍵)
on delete restrict | cascade | set null | no action
on update restrict | cascade | set null | no action
restrict :刪除或者更新時,在外間中出現的值操作失敗
cascade:將外鍵的值一同刪除或者更新
set null :刪除更新時外鍵的值被設置為空
例子首先說明有兩張表:
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.從表必須是主鍵被參照
數據完整性約束(1)——實體完整性、參照完整性