【问题标题】:What's the default of ONDELETE and ONUPDATE for foreign keys in SQL?SQL 中外键的 ONDELETE 和 ONUPDATE 的默认值是什么?
【发布时间】:2010-03-24 10:01:08
【问题描述】:

我的猜测是外键引用默认设置为 RESTRICT。但是,这有什么标准吗?任何数据库类型的默认值是否相等?或者是否应该在所有语句中定义这些值以便确定?

【问题讨论】:

    标签: sql foreign-keys constraints


    【解决方案1】:

    对于 postgres,NO ACTION 是默认设置,在大多数情况下与 RESTRICT 相同,如 here 所述。

    我建议在有疑问时(然后是一些疑问)明确表达,尤其是在 DDL 中。 这有多种原因:

    • 数据定义语句的某些行为可能取决于服务器设置和版本,因此您的备份和恢复可能受益于明确
    • 如果您尝试将数据从一个 RDBMS 引擎移动到另一个引擎,那么显式可以帮助您发现两种方言之间的误解(如果他们不会默默地跳过他们没有得到的部分)
    • 如果您现在甚至考虑模棱两可,请尝试想象几年后维护数据库的下一个人或您自己 - 明确并在您的创建脚本中发表评论总有一天会得到回报

    【讨论】:

    • 对于 ISO/ANSI 标准 SQL-92,默认值为 NO ACTION。这是因为显式引用操作(包括NO ACTION)是完整的 SQL-92 功能。换句话说,入门级 SQL-92 允许您在不指定引用操作的情况下创建 FK,而NO ACTION 是大多数从业者期望外键默认工作的方式。还要考虑到在引入 SQL-92 时,许多 SQL 产品都缺少 CASCADE 引用操作。
    【解决方案2】:

    您还应该考虑到并非所有 DBMS 都承认这些选项(也不允许在其中使用相同的值)。比如我认为Oracle不支持onupdate子句

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 2021-10-16
      • 1970-01-01
      • 2016-07-16
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多