1. 外部鍵是一種限制,拿來表示要參照某表格中的某列,外部鍵所參照的欄位稱為父鍵,其表格稱為父表格,而外部鍵所屬的表格稱為子表格
2. 父鍵的值必須為PRIMARY KEY 或UNIQUE
3. 外部鍵可設定連鎖更新、連鎖刪除,當父鍵的欄值有更動,或欄遭刪除,其對照的外部鍵也會一同變更
4. 注意:不可在刪除父表格前就刪除子表格
方法一※製作表格時設定※
1. 定義完所有欄位後可以這樣寫
create table 子Table名 (欄位名A 資料類型A, 欄位名B 資料類型B, foreign key (外部鍵欄位名) references 父Table名 ( 父鍵欄位名 ))
EX:
create table test1 (id int, neme2 varchar (20),foreign key (id) references stest (no))
2. 定義欄位時可以這樣寫
create table 子Table名 (欄位名A 資料類型A references 父Table名 ( 父鍵欄位名 ), 欄位名B 資料類型B,)
EX:
create table test2 (id2 int references stest (no), neme3 varchar (20))
檢視成果:
指令
insert into test1 values (5,'bb') ;
insert into test1 values (1,'aa') ;
insert into test2 values (5,'bb') ;
insert into test2 values (1,'aa') ;
SQL訊息:
(1 個資料列受到影響) 訊息547,層級16,狀態0,行2 INSERT 陳述式與FOREIGN KEY 條件約束"FK__test1__id__1FCDBCEB" 衝突。衝突發生在資料庫"test1",資料表"dbo.stest", column 'no'。 陳述式已經結束。 (1 個資料列受到影響) 訊息547,層級16,狀態0,行4 INSERT 陳述式與FOREIGN KEY 條件約束"FK__test2__id2__21B6055D" 衝突。衝突發生在資料庫"test1",資料表"dbo.stest", column 'no'。 陳述式已經結束。 |
資料(1,'aa')登入失敗 因父鍵 "no"欄位無對照資料"1"所以登入失敗
table結果:
stest
| test1
| tset2
|
方法二※表格建立後才追加建立外部鍵 ※
alter table 子Table名 addforeign key (外部鍵欄位名) references 父Table名 ( 父鍵欄位名 )
EX: alter table test2 add foreign key (no2) references stest (no)
沒有留言:
張貼留言