最近闲来无事,开始学习ocp课程,发现有很多细节的东西以前没用过,很值得一学,今天就是第一次看到on delete set null的选项。
SQL> create table p(id number,dname varchar2(10));
表已创建。
SQL> alter table p add constraint pk_p primary key(id);
表已更改。
SQL> insert into p values(1,'a');
已创建 1 行。
SQL> commit;
提交完成。
SQL> create table c(cid number primary key,pid number);
表已创建。
SQL> alter table c add constraint fk_c foreign key(pid) references p(id) on delete set null;
表已更改。
SQL> insert into c values(1,1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from p;
ID DNAME
---------- ----------
1 a
SQL> select * from c;
CID PID
---------- ----------
1 1
SQL> delete from p;
已删除 1 行。
SQL> select * from c;
CID PID
---------- ----------
1
SQL> alter table c drop constraint fk_c;
表已更改。
SQL> alter table c add constraint fk_c foreign key(pid) references p(id) on delete cascade;
表已更改。
SQL> delete from p;
已删除 1 行。
SQL> select * from p;
未选定行
SQL> select * from c;
未选定行
结论: on delete cascade级联删除子表的记录,on delete cascade set null 将子表记录的外键值设置为null
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10972173/viewspace-703123/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10972173/viewspace-703123/