Oracle學習 之外鍵約束總結

2021-09-29 03:50:10 字數 3427 閱讀 3815

主表和子表的概念:如果表中定義了外來鍵約束,那麼該錶通常被稱為

子表;如果表中包含引用鍵,那麼該錶被稱為

父表。其中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...