Mysql 关系限制是否阻止我删除父记录?

Mysql 关系限制是否阻止我删除父记录?,mysql,database,foreign-keys,Mysql,Database,Foreign Keys,假设我有一个表,它有一个唯一索引的列,名为user\u name,它被键入一个注释表,该表的列名为user\u name,作为外键。关于要采取的行动,我有一些选择,特别是1)更新和2)删除 我知道其中一些选项是为了Cascade这些关系的效果,例如,如果我从父表中删除父节点,则带有外键的子记录将被删除,即如果我删除用户,如果将其键控给用户,则其所有注释都将消失。我相信这将是一个on delete=>cascade选项,对于on update来说也是一个类似的选项,比如更改用户名会更改注释所有者的

假设我有一个表,它有一个唯一索引的列,名为
user\u name
,它被键入一个注释表,该表的列名为
user\u name
,作为外键。关于要采取的行动,我有一些选择,特别是1)
更新
和2)
删除

我知道其中一些选项是为了
Cascade
这些关系的效果,例如,如果我从父表中删除父节点,则带有外键的子记录将被删除,即如果我删除用户,如果将其键控给用户,则其所有注释都将消失。我相信这将是一个
on delete
=>
cascade
选项,对于
on update
来说也是一个类似的选项,比如更改用户名会更改注释所有者的名称

我的问题是,如果我要更新父记录,而操作是限制,这是否意味着父记录的外键不能更改,因为它设置了子记录?这些操作是否只涉及在更改父记录时如何处理子记录?另外,如果我将
delete
设置为
restrict
,这是否意味着如果父记录已有子记录,我将无法删除它

谢谢

  • 如果我要更新父记录,而操作是限制,这是否意味着父记录的外键无法更改,因为它已设置了子记录

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

  • 这些操作是否只涉及在更改父记录时如何处理子记录

  • 如果我将delete设置为restrict,这是否意味着如果父记录已有子记录,我将无法删除它

    是的,你会得到一个错误

  • 还有其他选择:

    • 设置NULL-当父行需要删除/更新时,所有子行将被删除 设置为空
    • 无操作-相当于限制
    如果需要禁用当前会话/查询的外键检查,可以执行以下操作:

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