书上有一句话,我无法理解,请帮忙指点!
《Oracle PL/SQL 宝典》Page58
FOREIGN KEY约束可以包含空值,但是,如果任何组合FOREIGN KEY约束的列包含空值,则将跳过组成该约束的所有值的验证。
------------------------------------------
我的理解是,如果外键包含NULL,那么将不会向该外键验证新加入数据的值。
但是我在PL/SQL Developer中试了一下,不是这样的。
--建立两个表create table publishinfo(publishid int,--出版社IDpublish varchar2(20),--出版社constraint un_publish unique (publish));create table bookinfo(bookid int,--图书IDloan char(1),--借出状态publish varchar2(20),--出版社constraint fk_publish foreign key (publish)references publishinfo (publish)on delete cascade);--开始添加数据insert into publishinfo(publishid ,publish)values(10000,111);insert into publishinfo(publishid ,publish)values(10000,null);insert into bookinfo(publishid ,publish)values(10000,222);--依旧会进行验证
--首先你的不是组合fk,组合是两个或两个以上联合作为外键,如下id,sid在一起叫组合fkcreate table t(id int,sid int,name varchar2(20),constraint pk_t primary key(id,sid));create table ct(cid int,id int,sid int,name varchar(20),constraint pk_ct primary key(cid),constraint fk_ct_t_id_sid foreign key(id,sid) references t(id,sid));insert into t values(1,1, 'name1');insert into ct values(1,1,1, 'n1 ');--此处可以成功,就像你说的:则将跳过组成该约束的所有值的验证。insert into ct values(2,1,null, 'n2');--此处失败insert into ct values(2,1,2, 'n2');
[解决办法]
FOREIGN KEY约束可以包含空值
任何组合FOREIGN KEY约束的列包含空值