Sql 是否需要将外键设置为非空
是否需要将表中的外键列设置为非空, 如果我们没有将外键列显式写为NOTNULL,它将是什么? 它可以包含空值吗 以下两种说法的区别是什么:Sql 是否需要将外键设置为非空,sql,sql-server,Sql,Sql Server,是否需要将表中的外键列设置为非空, 如果我们没有将外键列显式写为NOTNULL,它将是什么? 它可以包含空值吗 以下两种说法的区别是什么: [PhoneId] [int] NOT NULL FOREIGN KEY REFERENCES [dbo].[tbl_PhoneNumber](PhoneNumberId) [PhoneId] [int] FOREIGN KEY REFERENCES [dbo].[tbl_PhoneNumber](PhoneNumberId) 这不是必需的。不带NOT N
[PhoneId] [int] NOT NULL FOREIGN KEY REFERENCES [dbo].[tbl_PhoneNumber](PhoneNumberId)
[PhoneId] [int] FOREIGN KEY REFERENCES [dbo].[tbl_PhoneNumber](PhoneNumberId)
这不是必需的。不带
NOT NULL
的外键属性可以包含NULL
值,这可用于指示引用关系中没有此类元组适用
是否需要将表中的外键列设置为非空
不,这不是必需的。MSDN表示:-
在“外部”字段的列中输入非NULL的值时
键约束,该值必须存在于引用列中;
否则,将返回外键冲突错误消息。使
确保复合外键约束的所有值均为
已验证,请在所有参与列上指定NOTNULL
因此,你的问题的简单答案是不,这不是必需的
外键属性也可以包含空值
第二个定义将允许列中的null
发件人:-
将外键约束添加到现有列或
默认情况下,SQL Server表中的列将检查现有数据
在列中,以确保除NULL以外的所有值都存在于
引用的主键或唯一约束的列
同时根据sql规范化规则检查,外键值必须等于主键值或NULL,因此它将包含主键表行中一个值的NULL值。意味着默认情况下它也可以包含NULL值@DhananjayPatil:-是的,它可能包含空值!不同之处在于,第二个定义将允许列中为null。第一个关系为
1::0..n
,第二个关系为0..1::0..n
(如果您熟悉此符号)。@ypercube-这取决于ANSI null默认数据库选项以及客户端库是否调用