【问题标题】:What's the meaning of RESTRICT in Foreign Keys?外键中 RESTRICT 的含义是什么?
【发布时间】:2021-06-22 15:49:31
【问题描述】:

有4种情况:(比如我说的是ON DELETE

  • CASCADE:引用行将与被引用行一起自动删除。
  • SET NULL:引用记录的值将与被引用记录一起自动设置为NULL
  • NO ACTION:被引用行被删除后,引用行不会有任何变化。
  • RESTRICT:{我看不懂它的概念}

为此,我多次阅读documentation,但我仍然无法理解RESTRICT 的作用。可以请人举例说明一下吗?

我在某处读到 NO ACTIONRESTRICT 在 MySQL 中是相同的。这是真的吗?

【问题讨论】:

  • 从您引用的参考资料中:if you have defined a RESTRICT type constraint, and there is a child row with several parent rows, InnoDB does not permit the deletion of any of those parent rows.您对此有何解释?
  • @DanBracuk MySQL 手册以不是最容易理解的语言形式而闻名....

标签: mysql sql foreign-keys


【解决方案1】:

限制:在不删除依赖记录(引用外键的记录)的情况下,不允许删除此(父)记录

例如,对于这些表格:

  • parent:

    ID  NAME
    1   AAAA
    2   BBBBB
    
  • child:

    ID  PARENT_ID
    1   1
    2   1
    3   2
    

我们可以预期以下行为:

  • ON DELETE CASCADE
    

    如果我们从父级中删除 AAA,它将:删除子级中的条目 1 和 2

  • ON DELETE SET NULL
    

    如果我们从父项中删除 AAA,它将:将列 PARENT_ID 设置为 null 以用于子项中的条目 1 和 2

  • ON DELETE SET DEFAULT
    

    如果我们从父项中删除 AAA,它将:将列 PARENT_ID 设置为子项中条目 1 和 2 的 默认值

  • ON DELETE NO ACTION
    

    如果我们从父级删除AAA,它将:允许删除并且对子项中的条目没有任何操作

  • ON DELETE RESTRICT
    

    如果不先更新或删除子项中的条目 1 和 2,我们无法从父项中删除 AAA

【讨论】:

  • 我猜所有情况(CASCADE, SET NULL, NO ACTION)不允许删除父记录而不删除依赖记录.
  • 没有删除级联,当我们删除父记录中的记录时,它将删除子表上的相关条目
  • @Stack 用示例添加了所有 4 个定义,因为它也会帮助其他人
  • 嗨@MaheshMadushanka 您所说的设置为默认值是什么意思:ON DELETE SET DEFAULT:将 PARENT_ID 列设置为子项中条目 1 和 2 的默认值。
  • ? 我从过去就知道这个问题。但过去是为了未来。
【解决方案2】:

RESTRICT:拒绝对父表的删除或更新操作。指定 RESTRICT(或 NO ACTION)与省略 ON DELETE 或 ON UPDATE 子句相同。

NO ACTION:标准 SQL 中的关键字。在 MySQL 中,相当于 RESTRICT。如果引用的表中存在相关的外键值,MySQL Server 将拒绝对父表的删除或更新操作。一些数据库系统有延迟检查,NO ACTION 是延迟检查。在 MySQL 中,外键约束是立即检查的,因此 NO ACTION 与 RESTRICT 相同。

【讨论】:

  • 你有这个答案的参考吗,阿马尔?
  • 你可以这样测试,[CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ...) REFERENCES tbl_name (index_col_name,...) [ON DELETE reference_option] [ON UPDATE参考选项] 参考选项:限制 |级联 |设置空 |没有行动
【解决方案3】:

如果子表中存在记录,RESTRICT 将不允许删除或更新父记录

【讨论】:

    【解决方案4】:

    你可以这样测试,

                                                                                                                              [CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]
    

    reference_option: 限制 |级联 |设置空 |没有行动

    【讨论】:

      猜你喜欢
      • 2011-12-25
      • 2010-10-21
      • 2018-09-13
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      相关资源
      最近更新 更多