回 帖 发 新 帖 刷新版面

主题:[讨论]外键能不能为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,否者会破坏数据的完整性规则.
有谁能更清楚的解释一下这个概念?

回复列表 (共1个回复)

沙发

联机丛书中准确的解释是

如果在 FOREIGN KEY 约束的列中输入非 NULL 值,则此值必须在被引用的列中存在,否则将返回违反外键约束的错误信息。

也就是说外键中可以有null,除非外键列定义了not null

我来回复

您尚未登录,请登录后再回复。点此登录或注册