主题:[讨论]外键能不能为null?
看到书上有这样一句话:外键的值不允许参照相应主表中不存在的主键值,或者外键为空值.
但我下面的一个练习,却可以使外键为空,对此感到很疑惑
create table t1(id int primary key ,col char(1))
create table t2(id int foreign key references t1(id),col char(1))
insert into t1 values(1,'a')
insert into t1 values(2,'a')
insert into t1 values(3,'a')
insert into t2 values(null,'d')
insert into t2 values(1,'d')
insert into t2 values(1,'3')
select * from t2
drop table t2,t1
查询结果中有记录显示插入了null值,我个人认为既然外键是引用了主表中主键的值,而主表中主键的值是不可能为null的,所以从表中的外键值也不能为null,否者会破坏数据的完整性规则.
有谁能更清楚的解释一下这个概念?
但我下面的一个练习,却可以使外键为空,对此感到很疑惑
create table t1(id int primary key ,col char(1))
create table t2(id int foreign key references t1(id),col char(1))
insert into t1 values(1,'a')
insert into t1 values(2,'a')
insert into t1 values(3,'a')
insert into t2 values(null,'d')
insert into t2 values(1,'d')
insert into t2 values(1,'3')
select * from t2
drop table t2,t1
查询结果中有记录显示插入了null值,我个人认为既然外键是引用了主表中主键的值,而主表中主键的值是不可能为null的,所以从表中的外键值也不能为null,否者会破坏数据的完整性规则.
有谁能更清楚的解释一下这个概念?