【问题标题】:How to prevent Sequelize MySQL derived table record from deleting when the parent table record is being deleted?删除父表记录时如何防止Sequelize MySQL派生表记录被删除?
【发布时间】:2020-01-02 08:56:36
【问题描述】:
  • 目前正在使用 Sequelize 和 MySQL 方言。那里有两个 BaseTableDerivedTable 表。 id 来自哪里 基表在派生表中用作外键
  • 现在我正在删除基表上的记录,它会自动从派生表中删除记录,这些记录通过外键约束依赖。
  • 问题是:

如何防止派生表中的记录,连基表记录都被删除?

【问题讨论】:

    标签: mysql foreign-keys sequelize.js cascading-deletes


    【解决方案1】:

    您是否启用了级联({onDelete: 'CASCADE'} 设置)?如果是这样,请删除它。

    【讨论】:

    • 是的,我已将其删除。之后我需要更改任何配置吗?
    • 是的,还需要应用相应的迁移,以便表的“ON DELETE”具有“NO ACTION”值。或者您可以手动更改 BaseTable,如下所示:
        ALTER TABLE test_on_delate_cascade.parent DROP FOREIGN KEY fk_parent_1;更改表 test_on_delate_cascade.parent 添加约束 fk_parent_1 外键 (child_id) 引用 test_on_delate_cascade.new_table (id) ON DELETE NO ACTION ON UPDATE NO ACTION; 
      或者如果没有存储必要的数据,只需删除表并重新创建
    • 好吧,如果我不想删除派生记录,我必须提到 onDelete="NO ACTION"?我说的对吗?
    • 因为我已经测试了所有 4 个 onDelete 约束,只有 SET NULL 会保留那些派生表记录,但具有 NULL 值。如果我想保持这个值和以前一样,我应该怎么做?有什么办法吗?
    • 请您用 SET NULL 更新您的答案是在具有外键约束时防止数据被删除的解决方案。所以它也会对其他人有所帮助。