--主键表的创建
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/