1. 程式人生 > >Oracle-12-外來鍵約束

Oracle-12-外來鍵約束

一、外來鍵約束(即引用完整性約束)

例:有如下兩張表他們之間的引用完整性

create table student (--學生表

s_id number(5) primary key,

s_name varchar2(20),

t_id varchar2(5),

constraint fk_stu foreign key (t_id) references team (t_id)

)

create table team (--班級表

t_id varchar2(5) primary key,

t_name varchar2(20)

)

其中constraint fk_stu foreign key (t_id) references team (t_id)中,第一個t_id指的是學生表中的t_id,第二個t_id指的是班級表中的t_id

例:


(1)圖中學生表中每個學號為主鍵(【注意】以後建表必須要主鍵),每一個學號對應一個班級號,所以在學生表中,只要給定一個學號,就能查到其對應的班級號,那麼再去班級表中可以查詢到對應的班級名稱。

(2)對於圖中學生表第三行有個t005班級號是錯誤的,因為在班級表中不存在t005編號對應的班級,班級號稱為學生表的外來鍵,因此這時就必須有外來鍵約束。

3)外來鍵約束:是一種子父關係,且可以很好的保護兩表之間的關係。

(4)圖中t005是非法資料,所以正確資料是要麼學生表第三行班級號不寫任何資料,要麼就寫t001或者t002。

二、建外來鍵的語法

【注意】

1.建外來鍵的命令必須放在含有外來鍵的那張表中,即子表中。

2.子表和父表如何判斷?子和父對應關係是n:1,就是一個人只能有一個爹,而一個爹可以有多個兒!

constraint 自定義的外來鍵名 foreign key (外來鍵列名) references 父表(列名)

3.外來鍵允許為空

4.插入有資料的值,外來鍵中的值必須能夠在父表中找到(如上圖學生表中的t005就是非法資料,因為t005在父表中找不到)

如:constraint fk_stu foreign key (t_id) references team (t_id)

實戰操作:

規定一個運動員只能參加一個專案,一個專案可以被多個運動員參加,

所以專案和運動員關係是1:N。

Step1:先建立父表,記得規定主鍵

,如下圖:


Step2:再建立子表,注意圖中的主鍵和外來鍵約束語句,如下圖:


Step3:往父表game中插入資料,如下圖:


Step4:往子表player裡面插入資料,注意外來鍵約束,因為此時父表game裡面只有1001、1002、1003三個專案,那麼此時先“讓劉翔參加1001”,如下圖:


如果此時“讓博爾特參加1004”,如下圖:


報錯,因為1004在父表game中查不到,違反外來鍵約束。

所以說“未找到父項關鍵字”,這時候就是

外來鍵約束在保護資料。

Step5:繼續驗證,在子表player中插入資料,外來鍵為null,如下圖:


因此外來鍵可以插入空資料,即null

Step6:說一個超前知識,即兩表查詢,這個後續會詳細介紹,如下圖: