【问题标题】:Do relational restrictions keep me from deleting parent records?关系限制是否阻止我删除父记录?
【发布时间】:2015-12-02 05:23:22
【问题描述】:

假设我有一个表,其中有一个名为user_name 的唯一索引列,该表以列名user_name 作为外键的注释表作为键。我有一些关于要采取的行动的选项,特别是 1) on update 和 2) on delete

我了解其中一些选项是对Cascade这些关系的影响,例如如果我从父表中删除父节点,则具有外键的子记录将被删除,即如果我删除用户,如果他们键入用户,他们所有的 cmets 都应该消失。我相信这将是一个on delete => cascade 选项,这与on update 类似,例如更改用户名会更改评论所有者的名称。

我的问题是,如果我要 update 父记录并且操作是 restrict,这是否意味着父记录的外键无法更改,因为它设置了子记录?如果父记录发生更改,这些操作是否仅讨论如何处理子记录?另外,如果我将delete 设置为restrict,这是否意味着如果父记录已经存在子记录,我将无法删除它?

谢谢。

【问题讨论】:

    标签: mysql database foreign-keys


    【解决方案1】:
    1. 如果我要更新父记录并且操作是限制,这是否意味着父记录的外键无法更改,因为它设置了子记录?

      是的,你会得到一个错误并且父记录不会被更新

    2. 这些操作是否只讨论在父记录发生更改时如何处理子记录?

      是的

    3. 如果我将删除设置为限制,这是否意味着如果父记录已经存在子记录,我将无法删除它?

      是的,你会得到一个错误

    还有另一个选项available:

    • SET NULL - 当父行需要被删除/更新时,所有子行都会 设为NULL
    • NO ACTION - 相当于 RESTRICT

    如果您需要为当前会话/查询禁用外键检查,您可以这样做:

    mysql> SET foreign_key_checks = 0;
    mysql> SOURCE dump_file_name;
    mysql> another query;
    mysql> SET foreign_key_checks = 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      相关资源
      最近更新 更多