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