ORA-02266: 表中的唯一/主鍵被啟用的外鍵引用


ORA-02266: 表中的唯一/主鍵被啟用的外鍵引用 

 
 

(一):

  在刪除有父子表關系的表的數據時,我們都知道要先刪除子表 再 刪除父表數據,或者先取消外鍵 然后再刪除。

昨天采用先刪子表 ,再刪父表,刪除時使用truncate,結果在刪除父表的時候,給出了這個提示:“表中的唯一/主鍵被啟用的外鍵引用”。

而改成delete則刪除成功。

網上給出的解釋是ddl與dml 的區別。這也是truncate與delete的又一個不同之處。

 

 

(二):

今天想truncate一張表,但報ORA-02266錯誤
想到可能是主鍵被子表引用,查了一下
解決如下:
SQL> truncate table c_location;
truncate table c_location               *
ERROR 位於第 1 行:
ORA-02266: 表中的唯一/主鍵被啟用的外部關鍵字引用


SQL> alter table c_location disable primary key cascade;

表已更改。

SQL> truncate table c_location;

表已截掉。

SQL> alter table c_location enable primary key;

表已更改。

SQL>ALTER TABLE '子表' ENABLE CONSTRAINT '外鍵約束名';

*特別注意的是在ENABLE主鍵后不會自動恢復外鍵(沒有cascade選項),因此需要手工對引用該鍵的約束進行ENABLE

 

由於此解決方法會disable掉關聯子表的外鍵,所以慎用。 

(三)

1、ORACLE數據庫中的外鍵約束名都在表user_constraints中可以查到。其中constraint_type='R'表示是外鍵約束。


2、啟用外鍵約束的命令為:alter table 表名  enable constraint  約束名
3、禁用外鍵約束的命令為:alter table 表名 disable constraint  約束名

4、然后再用SQL查出數據庫中所以外鍵的約束名:


select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R'
select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM