我知道在 PostgreSQL 中,如果从一个表B
到另一个表有一个多列 FK,A
并且表中的一个或多个 FK 列B
可以为空,那么对于B
这些列的值为实际上是 NULL,不检查表中是否存在相应的行A
(因为主键列不能为空):
但是,这是 PostgreSQL 特定的还是在 SQL 标准中?(使用 SQL Fiddle 进行实验,似乎 MS SQL Server 和 MySQL 的行为方式相同)。
我知道在 PostgreSQL 中,如果从一个表B
到另一个表有一个多列 FK,A
并且表中的一个或多个 FK 列B
可以为空,那么对于B
这些列的值为实际上是 NULL,不检查表中是否存在相应的行A
(因为主键列不能为空):
但是,这是 PostgreSQL 特定的还是在 SQL 标准中?(使用 SQL Fiddle 进行实验,似乎 MS SQL Server 和 MySQL 的行为方式相同)。
此行为(允许
NULL
FK 列中的值)符合 SQL 标准。手册:并且没有为 FK 约束列出例外。
要禁止多列 FK 的某些
MATCH FULL
列为 NULL,请使用而不是默认MATCH SIMPLE
行为。手册:或者只定义部分或全部 column
NOT NULL
。更多信息(如@ypercube 评论):