關閉資料庫外來鍵約束
阿新 • • 發佈:2019-01-05
本文的測試環境是:
- MySQL 5.5.16
- Microsoft SQL Server 2008 R2 (SP2)
- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
當向資料庫中插入資料的時候,如果有表之間的關係十分複雜,尤其是是存在各種外來鍵關係,這是需要暫時關閉這種針對外來鍵約束的檢查,本文針對以下三種資料庫進行了一個總結,如下:
一、MySQL
資料庫
MySQL
中資料庫中的外來鍵約束是通過變數foreign_key_checks
作用的,這個變數管理的全域性的外來鍵約束,而沒有針對每個表的外來鍵約束進行單獨管理
1. 檢視變數外來鍵約束
show variables like '%foreign_key_checks%'
select @@foreign_key_checks
2. 開啟外來鍵約束:
set foreign_key_checks = 1
3.關閉外來鍵約束:
set foreign_key_checks = 0
二、SQL Server
資料庫
在SQL Server
資料庫中針對外來鍵約束進行了統一的管理,它的粒度已經到表的層次,而不像MySQL
中的那樣只能對全域性進行設定。SQL Server
中外來鍵約束的管理是通過系統的儲存過程來實現的,如下:
sp_helpconstraint [ @objname = ] 'table' [ , [ @nomsg = ] 'no_message' ]
@objname
:約束資訊所在的表名,型別為nvarchar(776),沒有預設值;@nomsg
:要打印表名資訊,幾乎不用;
1. 檢視約束資訊
EXEC sp_helpconstraint 't_archetype_revision_file'
在儲存過程中查詢到的約束資訊有:
- Constraint_Type:列的約束型別,約束的型別有:
PRIMARY KEY
FOREIGN KEY
DEFAULT
CHECK
- Constraint_Name:使用者或者系統定義的約束名稱;
- Delete_action :針對外來鍵約束,當外來鍵刪除時採取的操作,為No Action或者cascade;
- Update_Action:針對外來鍵約束,當外來鍵更新時採取的操作,為No Action或者cascade;
- Status_Enabled :針對外來鍵約束和check約束,是否啟用,當約束建立時預設是啟用的;
- Status_For_Replication :針對外來鍵和check約束,當複製的時候是否強制執行;
- Constraint_Keys :針對check和default約束顯示的是表示式,針對其他約束顯示的是列名;
2. 開啟外來鍵約束
通過Alter Table語句完成,示例如下:
Alter Table t_archetype_revision_file CHECK CONSTRAINT FK1jdbfqwxvcn37y16ofob43ywf
3. 關閉外來鍵約束
Alter Table t_archetype_revision_file NOCHECK CONSTRAINT FK1jdbfqwxvcn37y16ofob43ywf
三、Oracle
資料庫
Oracle中的外來鍵約束的管理與SQL Server中的類似,也是統一管理的,針對的也是表的層次。外來鍵約束的統一管理是在資料字典表user_constraints中。
1.檢視約束
SELECT * FROM user_constraints
在裡面有很多的欄位,這裡我們只關注相關的幾項:
- CONSTRAINT_NAME:約束名稱;
- CONSTRAINT__TYPE:約束型別,包括:
- R:外來鍵約束;
- U:唯一約束;
- P:主鍵約束;
- C:check約束;
- O:用於檢視,只讀約束;
- ……
- TABLE_NAME:約束所在的表;
- STATUS:使用狀態,ENABLED標識啟用,DISABLED標識禁用;
但是在這個檢視中,沒有約束對應的表的列,可以通過連線user_cons_columns來查詢,如下:
SELECT * FROM user_constraints t1 left join user_cons_columns t2 on t1.CONSTRAINT_NAME = t2.CONSTRAINT_NAME where t1.CONSTRAINT_NAME = 'LOGMNR_SESSION_EVOLVE$_PK'
2. 開啟外來鍵約束
預設情況下,建立約束時開啟該約束。
alter table table_name enable constraint constraint_name
3. 關閉外來鍵約束
alter table table_name disable constraint constraint_name