Oracle匯入資料外來鍵問題

2021-10-10 04:47:47 字數 1301 閱讀 6046

假設表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...