【问题标题】:Whenever I try to set foreign key constraint to "NO ACTION" MySQL workbench automatically sets it to "RESTRICT"每当我尝试将外键约束设置为“NO ACTION”时,MySQL 工作台会自动将其设置为“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;

【问题讨论】:

    标签: mysql sql foreign-keys relational-database mysql-workbench


    【解决方案1】:

    NO ACTIONRESTRICT 是同义词。

    "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 的“软”删除很好。
    猜你喜欢
    • 2021-09-10
    • 2018-10-23
    • 2013-04-16
    • 2012-06-22
    • 1970-01-01
    • 2021-04-20
    • 2014-10-26
    • 1970-01-01
    • 2021-04-19
    相关资源
    最近更新 更多