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

时间:2018-06-23 11:30:07

标签: laravel laravel-5 eloquent laravel-5.2 laravel-5.1

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

  

违反完整性约束:无法删除或更新父行:   外键约束失败

注意:由于数据库已创建,我无法使用迁移。

2 个答案:

答案 0 :(得分:0)

在外键上使用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 :(得分:0)

我建议通过以下操作对此做进一步调查:

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

注意:

如果您需要在此期间更正数据,请确保 ,并且您确信数据库的数据完整性不会受到威胁 。在更正数据时,可以使用以下语句删除外键检查。

SET FOREIGN_KEY_CHECKS = 0;

SET FOREIGN_KEY_CHECKS = 1;

我承受不了足够的压力,记住一旦完成就打开外键检查,不要在生产数据库上执行此操作。复制数据库并在本地尝试操作,直到您确信自己的更正是100%安全的;)