是否需要将表中的外键列设置为 NOT NULL,如果我们没有明确地将外键列写为非空,它将是什么?它可以包含空值吗?
以下两个陈述之间有什么区别:
[PhoneId] [int] NOT NULL FOREIGN KEY REFERENCES [dbo].[tbl_PhoneNumber](PhoneNumberId)
[PhoneId] [int] FOREIGN KEY REFERENCES [dbo].[tbl_PhoneNumber](PhoneNumberId)
是否需要将表中的外键列设置为 NOT NULL,如果我们没有明确地将外键列写为非空,它将是什么?它可以包含空值吗?
以下两个陈述之间有什么区别:
[PhoneId] [int] NOT NULL FOREIGN KEY REFERENCES [dbo].[tbl_PhoneNumber](PhoneNumberId)
[PhoneId] [int] FOREIGN KEY REFERENCES [dbo].[tbl_PhoneNumber](PhoneNumberId)
是否需要将表中的外键列设置为 NOT NULL,
不,它不是必需的。MSDN 说:-
当在 FOREIGN KEY 约束的列中输入 NULL 以外的值时,该值必须存在于引用的列中;否则,返回外键违规错误消息。要确保验证复合外键约束的所有值,请在所有参与列上指定 NOT NULL。
因此,对您的问题的简单回答是“不”,这不是必需的。
外键属性也可以包含 NULL 值。
您的第二个定义将允许Nulls
在列中。
从这里:-
当将 FOREIGN KEY 约束添加到表 SQL Server 中的一个或多个现有列时,默认情况下检查列中的现有数据以确保所有值(NULL 除外)都存在于引用的 PRIMARY KEY 的列中或唯一约束。
还要检查外键约束
根据 sql 规范化规则,外键值必须等于主键值或 NULL,因此它将包含主键表行中的一个值的 NULL 值。
这不是必需的。NOT NULL
没有可以包含值的外键属性NULL
,这可以用来指示引用关系中没有这样的元组是适用的。