每当我尝试将外键约束设置为“NO ACTION”时,MySQL 工作台会自动将其设置为“RESTRICT”
Posted
技术标签:
【中文标题】每当我尝试将外键约束设置为“NO ACTION”时,MySQL 工作台会自动将其设置为“RESTRICT”【英文标题】:Whenever I try to set foreign key constraint to "NO ACTION" MySQL workbench automatically sets it to "RESTRICT" 【发布时间】:2021-09-03 15:19:32 【问题描述】:我正在尝试将外键设置为删除和更新到“NO ACTION”的约束,但由于某种原因,在我应用更改后,mysql 工作台将其自行更改回“受限”,我没有不知道为什么会这样。
这是 MySQL Workbench 在我尝试将更新和删除的约束更改为“NO ACTION”时生成的代码
ALTER TABLE `forums`.`post_replies`
DROP FOREIGN KEY `fk_post_replies_users`;
ALTER TABLE `forums`.`post_replies`
ADD CONSTRAINT `fk_post_replies_users`
FOREIGN KEY (`user_id`)
REFERENCES `forums`.`users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
【问题讨论】:
【参考方案1】:NO ACTION
和 RESTRICT
是同义词。
"13.1.20.5 FOREIGN KEY Constraints":
NO ACTION
:标准 SQL 中的关键字。在 MySQL 中,相当于RESTRICT
。
Workbench 似乎只是选择显示 RESTRICT
而不是 NO ACTION
(好吧,它必须选择一个并选择 MySQL 特定的一个......)。但这并不意味着什么不同。
【讨论】:
如果我想让它在父行被删除时什么都不做怎么办?例如,如果用户希望删除他们的帐户,我不希望删除他们的所有帖子 @InfinityVive:必须做一些事情,否则会有不一致的数据。一个选项是ON DELETE SET NULL
,它会“断开”用户的帖子,以便可以删除用户。或者考虑只是“软”删除用户。即不是真的DELETE
它而是UPDATE
一些指示用户不再活动的标志。在仅适用于活动用户的查询中过滤该标志。
" 当父行被删除时什么都不做" 那么你就没有外键。不要一开始就声明。 @sticky bit 的“软”删除很好。以上是关于每当我尝试将外键约束设置为“NO ACTION”时,MySQL 工作台会自动将其设置为“RESTRICT”的主要内容,如果未能解决你的问题,请参考以下文章