Oracle:外键关联导致数据无法删除
2013-05-29 15:51
323 查看
手动删除数据库中冗余数据可能遇到外键关联导致数据无法删除的问题。这个问题的解决及思考记录如下:
问题的产生是因为在数据库设计的时候,在建立外键关联的时候没有设置级联删除,也就是说在设置外键的时候并没有加上on delete cascade限定。对于这个问题,我的想法是:在数据库设计的时候一般情况下都是应该加上这样的限制的。如果说担心“级联删除”可能会误删有用的数据,这种情况如果真的发生的话,那么就应该在数据库的设计上找原因了。
如果在数据库设计的时候设置了级联删除,那么本文提到的问题是不会发生的。如果不幸这样的状况发生了,那么可以根据它提示的关联外键,到user_constraints表中按constraint_name查找到唯一的记录,当然查询这个系统视图的用户权限应该比较高,然后在记录中找到table_name,最后编辑表的外键关联,将on delete触发的动作改为cascade。如果数据库中数据库表很多,关联关系比较复杂,那么很可能在遇到问题之后要修改的外键关联时的级联删除不止一个两个。
此外,说两个题外话:
第一,设置外键关联的时候,级联操作有三种设置方式:
默认无动作:on delete no action;
置空:on delete set null;
级联删除:on delete cascade。
第二,在drop表的时候,用drop table cascade constraints语句,只会删除子表与父表之间的关联关系,不会删除子表中关联父表的那些记录。
问题的产生是因为在数据库设计的时候,在建立外键关联的时候没有设置级联删除,也就是说在设置外键的时候并没有加上on delete cascade限定。对于这个问题,我的想法是:在数据库设计的时候一般情况下都是应该加上这样的限制的。如果说担心“级联删除”可能会误删有用的数据,这种情况如果真的发生的话,那么就应该在数据库的设计上找原因了。
如果在数据库设计的时候设置了级联删除,那么本文提到的问题是不会发生的。如果不幸这样的状况发生了,那么可以根据它提示的关联外键,到user_constraints表中按constraint_name查找到唯一的记录,当然查询这个系统视图的用户权限应该比较高,然后在记录中找到table_name,最后编辑表的外键关联,将on delete触发的动作改为cascade。如果数据库中数据库表很多,关联关系比较复杂,那么很可能在遇到问题之后要修改的外键关联时的级联删除不止一个两个。
此外,说两个题外话:
第一,设置外键关联的时候,级联操作有三种设置方式:
默认无动作:on delete no action;
置空:on delete set null;
级联删除:on delete cascade。
第二,在drop表的时候,用drop table cascade constraints语句,只会删除子表与父表之间的关联关系,不会删除子表中关联父表的那些记录。
相关文章推荐
- Oracle:外键关联导致数据无法删除(转)
- Oracle:外键关联导致数据无法删除
- Oracle:外键关联导致数据无法删除
- oracle外键关联而无法删除数据
- oracle外键关联而无法删除数据
- oracle外键关联而无法删除数据
- 误使用rm删除数据文件导致oracle无法启动的修复方法
- SQL删除数据因外键关联导致花费时间太长----(外键列上增加索引解决此问题)
- 删除数据文件导致oracle系统无法启动
- Oracle因删除库数据文件导致服务无法启动的处理方法
- oracle数据文件强制删除导致无法启动的解决办法
- MySQL因为外键关联无法删除数据解决方法以及修改数据库全部表中某种外键的值
- ORA-01251错误oracle服务启动无法连接误删非法删除数据文件导致数据库不能打开ORA-01122 ORA-01251
- mysql由于外键关联无法删除数据
- 外键关联而无法删除数据
- 外键关联而无法删除数据
- 外键关联而无法删除数据
- oracle指向表的外键太多引起删除数据变慢
- 物理删除oracle数据文件(DBF文件)导致数据库ORA-01033的解决方法
- Oracle数据表的id为undefined时数据无法删除的解决办法