gpt4 book ai didi

mysql - 删除时设置 null 更新级联 MySQL

转载 作者:行者123 更新时间:2023-11-29 16:41:07 27 4
gpt4 key购买 nike

我有以下问题:

这是我在 MySQL 中的代码:

create table fremd(

id int primary key,
name varchar(20),
foreign key(id) references mensch(id) on delete set null

);

id 是该表的主键,也是引用表 mensch 的主键的外键。问题是 on delete set null 语句。当我使用级联而不是设置 null 时,它可以工作。但设置为 null 则不起作用。我能做什么?

这是错误消息:

08:39:00 Error Code: 1215. Cannot add foreign key constraint 2.609 sec

最佳答案

您的CREATE TABLE中有两个相互冲突的声明:

id int primary key

这基本上意味着 id 是主键。现在,主键基本上满足以下两个约束:

  • 这将是独一无二的。因此,任何两行的 id 值不能相同。
  • 它将是NOT NULL。因此,它永远不能设置为NULL

另一方面,您的外键定义指出:

foreign key(id) references mensch(id) on delete set null

ON DELETE SET NULL 基本上意味着当父表 id 值被删除时,子表(本表)id 值为设置为NULL。这与主键声明直接冲突,从而阻止其变为 NULL

这就是为什么你的外键无法定义的原因。您现在可以使用以下任一选项来解决此问题。但这些选项必须根据您的业务逻辑仔细确定:

  • 使用 id UNIQUE 键代替 主键。这将确保它保持唯一值,并且可以在其中使用 NULL
  • 将外键的 ON DELETE 行为更改为其他内容,例如 CASCADE (这将在删除父表行时删除子表行),或者 RESTRICT(这将阻止从父表中删除)。

关于mysql - 删除时设置 null 更新级联 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53333549/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com