首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于删除设置为null的更新级联MySQL

关于删除设置为null的更新级联MySQL
EN

Stack Overflow用户
提问于 2018-11-16 07:52:03
回答 1查看 5.9K关注 0票数 0

我有以下问题:

这是我在MySQL中的代码:

代码语言:javascript
复制
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秒

EN

回答 1

Stack Overflow用户

发布于 2018-11-16 08:09:09

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

代码语言:javascript
复制
id int primary key

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

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

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

代码语言:javascript
复制
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 (这将阻止从父表中删除)。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53333549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档