我有以下问题:
这是我在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秒
答案 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
(将阻止从父表中删除)。