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

有了Django之后数据库操作几乎再也不用写SQL语句了,除非必须手动更改一些东西。我今天就遇到了这样的问题。我把一个model的一个项目的数据类型写错了。玩Django的都清楚这时候用syncdb没用。没办法,开始噼里啪啦地砸键盘:mysql -u root -p。

进了数据库后直奔主题,甚至都没有show databases,找到table就决定把它给drop掉。结果冒出来一句错误。Cannot delete or update a parent row: a foreign key constraint fails。哦,我想起来了,我用了ForeignKey和ManyToManyFields,这个表和别的表之间有关联。于是我就找啊找啊找啊找,怎么删,甚至打开了MySQL的workbench想把它删掉,未果。

搜索引擎永远是First Aid。不过这次我找到办法用了不少时间。我只是在搜索怎么强制删除掉,没有想过造成这个事情的原因。原因很简单,有ForeignKey嘛。那么把它给取消了去!

SET FOREIGN_KEY_CHECKS = 0; //把FOREIGN_kEY君昏迷过去
然后把你想做的那些猥琐的事情趁着FOREIGN_KEY君还昏迷着都做了,快!
SET FOREIGN_KEY_CHECKS = 1; //再让FOREIGN_KEY君醒来

我相信你和你的代码现在都有事成的快感。哈哈。不过这玩意也就开发环境敢用,生产部署别冒险。

打赏

点赞