我有以下问题:
这是我在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语句。当我使用级联而不是set null时,它可以工作。但是对于set null,它不起作用。我能做什么?
这是错误消息:
08:39:00错误代码: 1215。无法添加外键约束2.609秒
发布于 2018-11-16 08:09:09
在CREATE TABLE中有两个相互冲突的声明
id int primary key这基本上意味着id是主键。现在,主键基本上满足以下两个约束:
id,没有两行不能具有相同的值。NOT NULL。因此,它永远不能设置为NULL。另一方面,您的外键定义指出:
foreign key(id) references mensch(id) on delete set nullON DELETE SET NULL基本上意味着当父表id值被删除时,子表(此表的) id值被设置为NULL。这与主键声明直接冲突,后者阻止它成为NULL。
这就是为什么不能定义外键的原因。现在可以使用下列任何选项来解决此问题。但是,必须根据您的业务逻辑仔细确定这些选项:
id UNIQUE键而不是Primary Key。这将确保它仍然是一个唯一的值,并且可以在其中使用NULL。ON DELETE更改为其他东西,如CASCADE (当父表行被删除时,这将删除子表行),或者,RESTRICT (这将阻止从父表中删除)。https://stackoverflow.com/questions/53333549
复制相似问题