表有主外键约束时的delete 方法


--主键表的创建
create table pk_table(id int   primary key,name varchar2(30))

insert into pk_table values(1,'computer');

insert into pk_table values(2,'music');

insert into pk_table values(3, 'sfsdfs');

insert into pk_table values(4,'aassssssssssssscczcxzxvcccaa');

commit;


select * from pk_table


--外键表的创建
create table fk_table(dept varchar2(45),sid int);


ALTER TABLE fk_table ADD CONSTRAINT fk_orders1 FOREIGN KEY (sid) REFERENCES pk_table(id);

insert into fk_table values('aaaa',1);

insert into fk_table values('bbbb',2);

insert into fk_table values('cccc',3);

insert into fk_table values('dddd',4);

 

commit;

   ---这时会报错   ORA-02292: integrity constraint (SYS.FK_ORDERS1) violated - child record found
delete from pk_table  where id=2;

 

--删除数据的方法有

--1.先删外键表的数据,再删除主表数据

delete from fk_table where sid=1;


--主键表
delete from pk_table where id=1;

commit;

--方法2:  把相关的外键约束disable

 ALTER TABLE fk_table disable CONSTRAINT fk_orders1;
 
 --约束disable后,删除表中需要删除的数据,注意有完敕性关连的数据必须全部删除,否则后面的enable constraint 将报错,所以清理数据时关连的要全部清理.
delete from fk_table where sid=2;

--主键表
delete from pk_table where id=2;
 
 commit;
 
 --将约束enable
 ALTER TABLE fk_table enable CONSTRAINT fk_orders1;
 
 
 
  --将约束enable, 加上novalidate 只检查以后进来的数据,对以存在的数据不作验证. 但你相关表数据删除没有完全清理时, 表的完敕性约束已破环.
 ALTER TABLE fk_table enable novalidate CONSTRAINT fk_orders1;
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10834762/viewspace-438811/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10834762/viewspace-438811/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值