主表和子表的概念:如果表中定義了外來鍵約束,那麼該錶通常被稱為
子表;如果表中包含引用鍵,那麼該錶被稱為
父表。其中table1 的表為從表,table2的表為主表
注意:在設定外來鍵約束的時候,主表的字段必須是主鍵。
主從表中相應的字段必須是相同資料型別,欄位名稱可以不一致。
從表中外鍵字段的值必須來自主表中的相應欄位的值,或者為null
oracle資料庫中的外來鍵約束名都在表user_constraints中可以查到。其中constraint_type='r'表示是外來鍵約束
例子:
//檢視當前使用者繫結schema的所有外來鍵
select * from user_constraints where constraint_type='r';
//檢視特定表的外來鍵
select constraint_type, table_name, status from user_constraints where table_name = 'test_student';
注:以下幾種刪除都是在外鍵啟用狀態下進行的分類討論
1、預設刪除—-即什麼都不加 或 使用 no action關鍵字
簡介:如果在定義外來鍵約束時使用no action關鍵字,那麼當父表中被引用列的資料被刪除時,將違反外來鍵約束,改操作也將被禁止執行,這也是外來鍵約束的預設引用型別。
//檢視test_student 有哪些約束
select constraint_type, table_name from user_constraints where table_name = 'test_student';
//新增約束(此處使用預設值即no action)
2、級聯刪除—-使用關鍵字 cascade簡介:如果在定義外來鍵約束時使用cascade關鍵字,那麼當父表中被引用列的資料被刪除時,子表中對應的資料也將被刪除。
//刪除
alter table test_student drop constraint fk_tab_studnet_tab_class;
//新增
3、置空刪除—-使用關鍵字set null簡介:如果在定義外來鍵約束時使用set null關鍵字,那麼當主表中被引用列的資料被刪除時,子表中對應的資料被設定為null。要使這個關鍵字起作用,子表中的對應列必須支援null值。
//刪除
alter table test_student drop constraint fk_tab_studnet_tab_class;
//新增
1、禁止狀態(disable):當約束處於禁止狀態時,即使對錶的操作與約束規則相衝突,操作也會被執行。
//使失效
alter table table_name disable constraint fk_name;
//檢視狀態
select constraint_type, table_name, status from user_constraints where table_name = 'table_name';
2、啟用狀態(enable):當約束處於啟用狀態時,如果對錶的操作與約束規則相衝突,則操作會被取消。
//使有效
alter table table_name enable constraint fk_name;
//檢視狀態
select constraint_type, table_name, status from user_constraints where table_name = 'table_name';
tips:用sql查出資料庫中所有外來鍵的約束名並使之啟用/失活:
//查出所有外來鍵並寫下啟用所有外來鍵sql語句
select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='r';
//查出所有外來鍵並寫下失活所有外來鍵sql語句
select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='r';
MySQL之外鍵約束
mysql有兩種常用的引擎型別 myisam和innodb。目前只有innodb引擎型別支援外來鍵約束。innodb中外鍵約束定義的語法如下 constraint symbol foreign key index name index col name,referencestbl name inde...
MySQL之外鍵約束
mysql有兩種常用的引擎型別 myisam和innodb。目前只有innodb引擎型別支援外來鍵約束。innodb中外鍵約束定義的語法如下 constraint symbol foreign key index name index col name,references tbl name ind...
MySQL之外鍵約束
mysql有兩種常用的引擎型別 myisam和innodb。目前只有innodb引擎型別支援外來鍵約束。innodb中外鍵約束定義的語法如下 constraint symbol foreign key index name index col name,references tbl name ind...