首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

书下有一句话,小弟我无法理解,请帮忙指点

2012-08-10 
书上有一句话,我无法理解,请帮忙指点!《Oracle PL/SQL 宝典》Page58FOREIGN KEY约束可以包含空值,但是,如果

书上有一句话,我无法理解,请帮忙指点!
《Oracle PL/SQL 宝典》Page58

FOREIGN KEY约束可以包含空值,但是,如果任何组合FOREIGN KEY约束的列包含空值,则将跳过组成该约束的所有值的验证。
------------------------------------------
我的理解是,如果外键包含NULL,那么将不会向该外键验证新加入数据的值。
但是我在PL/SQL Developer中试了一下,不是这样的。

SQL code
--建立两个表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);--依旧会进行验证


[解决办法]
SQL code
--首先你的不是组合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约束的列包含空值

热点排行