關閉數據庫外鍵約束

本文的測試環境是:

  • 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章