ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 表有主外键约束时的delete 方法

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

原创 Linux操作系统 作者:zengzg 时间:2019-07-04 10:48:07 0 删除 编辑


--主键表的创建
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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-09-09

  • 博文量
    50
  • 访问量
    38778