【问题标题】:What's the different between RESTRICT and NO ACTION?RESTRICT 和 NO ACTION 有什么区别?
【发布时间】:2016-09-05 22:43:20
【问题描述】:

我正在尝试在列上创建一个 FK,现在我在想我应该在什么时候使用 ON DELETE RESTRICT(或ON UPDATE RESTRICT。不是和NO ACTION一样吗?

ON DELETE RESTRICT 表示如果存在引用该父行的值的子行,则不能删除给定的父行。如果父行没有引用子行,则可以删除该父行。无论如何,它的定义是外键的默认行为。

我错过了什么吗?

【问题讨论】:

    标签: mysql sql foreign-keys


    【解决方案1】:

    它们是等价的。它甚至在documentation 中这么说:

    NO ACTION:标准 SQL 中的关键字。在 MySQL 中,相当于RESTRICT

    在具有延迟检查的数据库中它们之间存在差异,但 MySQL 没有。

    【讨论】:

      【解决方案2】:

      当您将约束定义为 deferable 并带有 initially deferred 或 initial immediate 模式时,唯一的区别就出来了。

      NO ACTION:在标准 SQL 中,NO ACTION 意味着没有任何操作,即如果存在相关的外键值,则不允许尝试删除或更新主键值。引用的表。 InnoDB 拒绝父表的删除或更新操作。

      RESTRICT:拒绝父表的删除或更新操作。指定 RESTRICT(或 NO ACTION)与省略 ON DELETE 或 ON UPDATE 子句相同。 (有些数据库系统有延迟检查,NO ACTION是延迟检查。在MySQL中,外键约束是立即检查的,所以NO ACTION和RESTRICT是一样的。)

      见: SQL SET CONTRAINS

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        • 2012-08-12
        • 2011-08-26
        • 2022-11-29
        • 2012-02-08
        • 2021-03-07
        • 1970-01-01
        相关资源
        最近更新 更多