【问题标题】:Difference between CASCADE and RESTRICT? SQL DDL databaseCASCADE 和 RESTRICT 的区别? SQL DDL 数据库
【发布时间】:2014-01-04 07:59:44
【问题描述】:

谁能告诉我CASCADERESTRICT 到底是什么意思? 它在受 DDL 部分约束的数据库系统中

如果我没有在我的ON DELETE 声明中写下它们怎么办?

【问题讨论】:

    标签: sql database ddl


    【解决方案1】:

    ON DELETE CASCADEON DELETE RESTRICT 是外键属性,您在创建两个表之间的关系时设置它们。

    如果您将关系设置为ON DELETE CASCADE,当您在“父”表上运行DELETE 语句时,它将自动DELETE“子”表中的所有相应行。但是RESTRICT(这是默认的外键关系行为)是当您尝试从“父”表中删除一行并且“子”表中存在具有相同ID的行时,它会失败,抱怨关于现有的子行。

    无论哪种方式,您都无需在 DELETE 子句中提及任何内容。

    我还写了一篇关于DELETEUPDATE 命令的不同规则的博文,在这里更详细地介绍了:

    SQL Server Foreign Key Update and Delete Rules | Koukia

    【讨论】:

    • 所以当我说 ON DELETE RESTRICT 时,父表中已删除的行不会从其他表中删除?
    • 当它设置为 RESTRICT 时,不会删除任何行(父行或子行),您将看到错误。如果您希望无论子行是否存在都删除父行,则应使用 NO ACTION。
    • 所以,Cascade 意味着当我删除父级时,子级也会被删除。当我尝试删除时,Restrict 给了我一个错误。当我删除父级时,No Action 不会改变子级的任何内容。 设置默认值在我删除父级时将子级设置为默认值。 Set null 在删除父级时将子级设置为 null。我对吗?非常感谢
    • 好吧,我刚刚查了一下,看起来 NO ACTION 和 RESTRICT 是一回事,其余的,你没看错。
    • ON DELETE NO ACTION(在某些 RDBMS 上与 ON DELETE RESTRICT 同义)是默认操作,因此没有必要编写它。当然你仍然可以删除孩子,你只需要在DELETE FROM parent_table之前明确地使用额外的DELETE FROM child_table,我认为这是最好的方法。
    【解决方案2】:

    正确,因此这些 ON DELETE 和 ON UPDATE 适用于父表/行。 NO ACTION 和 RESTRICT 是同一件事的原因是,如果父母不存在,您就不能与孩子和父母建立关系。

    【讨论】:

      【解决方案3】:

      与外键关联的on delete有3种类型

      1. 在删除级联时:从父表中删除数据时,自动从子表(外键表)中删除数据。
      2. Delete set Null 时:从父表中删除数据时,子表中的外键关联单元格将为空。
      3. 在删除限制上:当从父表中删除数据,并且有与子表关联的外键时出错,您不能删除记录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-16
        • 2011-05-16
        • 2014-10-15
        • 1970-01-01
        相关资源
        最近更新 更多