假設表t2的列fk_t2上有外來鍵,依賴於t1表的pk_t1列,t3表的列fk_t3上有外來鍵,依賴於t2表的pk_t2,即表t2既是父表也是子表,當將t2表資料清空重新匯入時,很容易遇到外來鍵衝突問題。
外來鍵約束的四種狀態:(1)enable validate:約束在建立時,預設就是此狀態。此狀態會「檢查表中原有行和新插入的行」。
(2)enable novalidate:不能輸入違反約束的新資料。但是,在建立約束時,並不檢查表中原有行。
(3)disable validate:檢查表中原有行是否違反約束,表中可以插入違反約束的行。
(4)disable novalidate:約束處於禁用狀態,且此狀態檢查表中原有資料是否違反約束.
可以通過如下sql查詢
select
'alter table '
||t.owner||
'.'||t.table_name||
' disable constraint '
||t.constraint_name||
' ; '
as rr ---禁用該錶的子表的外來鍵
from dba_constraints t
where t.constraint_type =
'r'and t.r_constraint_name in
(select constraint_name
from dba_constraints h
where h.table_name in
('&table1'
,'&table2'))
union
allselect
'alter table '
||t1.owner||
'.'||t1.table_name||
' disable constraint '
||t1.constraint_name||
' ; '
as rr ---禁用該錶上的外來鍵
from dba_constraints t1
where t1.constraint_type =
'r'and t1.table_name in
('&table1'
,'&table2'
);
將拼接出來的sql直接,即可禁用相應的外來鍵約束,資料匯入之後,再將外來鍵啟用。
mysql匯入資料時的外來鍵約束問題
當匯入資料的時候,經常會出現報告外來鍵錯誤,這是由於table中有外來鍵約束,但匯入資料時資料可能還沒完整,所以會出現這樣的錯誤。這個問題可通過foreign key checks解決,用法如下 set foreign key checks 0 在匯入前設定為不檢查外來鍵約束 匯入資料 set fo...
oracle外來鍵約束資料刪除
今天同事讓我刪除乙個表的資料,痛快的答應說好 看起來挺簡單的乙個任務,做起來可棘手,原來這個表是外來鍵約束的,作為乙個主表存在!可是,我剛剛接觸這個系統,可是難死我了 之後查了一下資料確認可以通過約束名來查詢到相應的表禁用約束,這才解決了 下面是我做的實驗過程 首先建兩張表 create table...
oracle外來鍵約束
新建父表 sql create table teacher 2 3 id number primary key,4 name varchar2 10 5 table created.新建子表 sql 1 create table student 2 3 id number primary key,4...