【发布时间】:2010-03-24 10:01:08
【问题描述】:
我的猜测是外键引用默认设置为 RESTRICT。但是,这有什么标准吗?任何数据库类型的默认值是否相等?或者是否应该在所有语句中定义这些值以便确定?
【问题讨论】:
标签: sql foreign-keys constraints
我的猜测是外键引用默认设置为 RESTRICT。但是,这有什么标准吗?任何数据库类型的默认值是否相等?或者是否应该在所有语句中定义这些值以便确定?
【问题讨论】:
标签: sql foreign-keys constraints
对于 postgres,NO ACTION 是默认设置,在大多数情况下与 RESTRICT 相同,如 here 所述。
我建议在有疑问时(然后是一些疑问)明确表达,尤其是在 DDL 中。 这有多种原因:
【讨论】:
NO ACTION。这是因为显式引用操作(包括NO ACTION)是完整的 SQL-92 功能。换句话说,入门级 SQL-92 允许您在不指定引用操作的情况下创建 FK,而NO ACTION 是大多数从业者期望外键默认工作的方式。还要考虑到在引入 SQL-92 时,许多 SQL 产品都缺少 CASCADE 引用操作。
您还应该考虑到并非所有 DBMS 都承认这些选项(也不允许在其中使用相同的值)。比如我认为Oracle不支持onupdate子句
【讨论】: