1. 程式人生 > >數據完整性約束(1)——實體完整性、參照完整性

數據完整性約束(1)——實體完整性、參照完整性

primary 最小化 關系 完整性 個數 uniq create bubuko cad

一.數據完整性的分類

在關系模型中,提供了實體完整性,參照完整性,用戶定義完整性。

二.實體完整性

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)——實體完整性、參照完整性