在不使用迁移的情况下在 mysql 中手动创建外键约束时无法删除记录。

Unable to delete a record when created foreign-key constraints manually in mysql without using migration.

我已经手动创建了数据库表,并且我还在表中手动创建了外键约束,而没有使用迁移。现在,当我要删除一条记录时,出现以下错误-

Integrity constraint violation: Cannot delete or update a parent row: a foreign key constraint fails

注意:我无法使用迁移,因为数据库已经创建。

在外键上使用 ON DELETE CASCADEON UPDATE CASCADE,例如:

...(create/alter Children table query)...
CONSTRAINT FK_ParentChild
FOREIGN KEY (parent_id) REFERENCES Parents(id) 
ON UPDATE CASCADE ON DELETE CASCADE;

因此您不必在删除父元素之前手动删除子元素。所有子记录将随着父记录的删除自动删除。

我建议通过执行以下操作进一步调查此问题:

  1. 在您的开发环境中,编写迁移以创建 从零开始的表格 2)
  2. 查看生成的架构并进行比较 到现有生产表的架构
  3. 注意 两种模式之间的差异和写入迁移以更正 生产表。

注:

如果您需要同时更正数据并且您确信数据库的数据完整性没有风险 .您可以在更正数据时使用以下语句删除外键检查。

SET FOREIGN_KEY_CHECKS = 0;

SET FOREIGN_KEY_CHECKS = 1;

我怎么强调都不过分,记得在完成后打开外键检查,不要在生产数据库上执行此操作。获取数据库的副本并在本地尝试一些事情,直到您确信您的更正是 100% 安全的;)