删除时在更新级联MySQL上设置null

时间:2018-11-16 07:52:04

标签: mysql foreign-keys mysql-workbench

我有以下问题:

这是我在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错误代码:1215。无法添加外键约束2.609秒

1 个答案:

答案 0 :(得分:0)

您的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键而不是Primary Key。这样可以确保它保持唯一值,并且可以在其中使用NULL
  • 将外键的ON DELETE行为更改为其他内容,例如CASCADE(当删除父表行时,这将删除子表行)或RESTRICT(将阻止从父表中删除)。