oracle中有主外键关系的数据如何删除

oracle中有主外键关系的数据如何删除,第1张

删除主表的记录时,你必先删除子表的记录才能够删主表的记录
删除子表的记录时,你可以直接删除
ORACLE 数据库支持级联删除,但要看你的约束是怎么建的
1ON DELETE CASCADE (级联删除)
2ON DELETE SET NULL (删除主表,子表列设置NULL)
没有设置上面两种方式,缺省是不允许删除,必须遵循下面的方式
删除主表的记录时,你必先删除子表的记录才能够删主表的记录
删除子表的记录时,你可以直接删除

例如我的表A中唯一约束(或者主键)为B,我要删除B的值为c,d,e的行那么可以执行:
delete from a where b in ('c','d','e');
拥有唯一性约束的表的确是比较容易进行判断和删除的。当然了我还可以使用外部条件如,
delete from a where b in (select c from d where e ='xx');
这就是删除了a表中的行,判断条件是b的值从d表的c列中取;c列的判断条件是,d表中e列的值为xx。

设定dept表deptno列为主键。
alter table dept add constraint pk_deptno primary key (deptno);
在emp表deptno列上建立外键引用dept表deptno,指定外键类型为级联删除。
alter table emp add constraint fk_deptno foreign key (deptno) references dept(deptno) on delete cascade;
这样删除dept表 只需:delete from dept where city='shanghai'; 就可以自动删除对应emp表内容。

在Oracle数据库中,我们知道创建主键约束的时候,会自动创建唯一索引,靠着唯一索引,保证数据的唯一,删除主键约束时,会自动删除对应的唯一索引。但是最近碰到了个奇怪的问题,同事说测试环境中删除一张表的主键约束,发现约束删了,但唯一索引还在,难道有什么隐藏的问题
Oracle11204,创建测试表,然后创建主键,自动生成同名的索引,
但是现象在这摆着的,有果必有因,看下MOS,是不是有类似的案例出现过,果然,3706331这篇文章介绍的和我们碰到的很像,使用ALTER TABLE删除主键约束的时候不能删除隐含的索引,但是请注意,有个前提,就是待删除主键约束的表是通过导入执行的,并不是我们自己手工创建的,而且文章 明确说了如果表是自行创建的,不是导入进来的,删除主键约束的时候会连带删除主键索引,这个问题来自于一个未公布的bug,3894962,通过导入 *** 作,主键索引并未依赖于主键约束,因此当删除主键约束的时候,不会自动删除对应的主键(/唯一)索引,值得一提的是,9i中并无此现象,从1010之 后的版本才出现此问题,解决方案就是删除索引,一种方式是drop constraint的时候带上drop index,一次性执行,另一种就是drop index删除索引


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12621607.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存