dis*_*ete 5 foreign-key sql-server referential-integrity
我在SQL Server 文档中注意到引用列的列表不是外键约束的必需参数:
<column_constraint> ::=
[ CONSTRAINT constraint_name ]
{ { PRIMARY KEY | UNIQUE }
(...)
| [ FOREIGN KEY ]
REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
| CHECK (...)
}
Run Code Online (Sandbox Code Playgroud)
如果我省略该( ref_column )
部分,它似乎引用了referenced_table_name
. 这样最方便。但是,我找不到此行为的任何规范,因此我谨慎使用它。
有谁知道它是否在任何地方指定?
我熟悉的任何官方 SQL Server 文档中都没有明确提到这种行为,但 1992 年的 SQL 标准草案(第 11.8.2.b 节)确实说:
如果
<referenced table and columns>
未指定 a<reference column list>
,则被引用表的表描述符应包括一个唯一约束,指定PRIMARY KEY
。让被引用的列是由该唯一约束中的唯一列标识的一列或多列,并让被引用的列是一个这样的列。本<referenced table and columns>
应被视为隐含指定<reference column list>
那是相同的<unique column list>
。
翻译过来,这意味着隐式外键确实引用了被引用表的主键。正如其他人在对该问题的评论中提到的那样,最好明确说明这种关系。
归档时间: |
|
查看次数: |
2579 次 |
最近记录: |