增加外键约束的时候,必须得删除数据库内的所有数据,这种情况怎么办呢?

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`mu_nxime_com`.`#sql-1154_18b29`, CONSTRAINT `supply_infos_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE) (SQL: alter table `supply_infos` add constraint `supply_infos_user_id_foreign` foreign key (`user_id`) references `users` (`id`) on delete cascade)

添加外键约束的时候提示以上错误,查明原因,是因为数据库内有数据,删除所有数据就可以了。

但是有些情况下,数据库内的数据是不能删除的。这种时候该怎么处理呢?

乌鸦嘴社区 wyz.xyz 来玩。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
leo
最佳答案

说明有脏数据,supply_infos.user_id 这个字段包含了 users.id 中不存在的值

3年前 评论
讨论数量: 5
leo

说明有脏数据,supply_infos.user_id 这个字段包含了 users.id 中不存在的值

3年前 评论

千万别用数据库外键 最好的办法是,在应用层做关联

3年前 评论
leo 3年前
thebestxt

楼上的建议不错。最好是在业务层关联,除非公司有专门的dba,外键不是必要的。

必须删除全部数据的话,你可以先新建一个表,再用SQL把老数据导进去,导的过程中可能需要进行一定的处理。

3年前 评论

解决方案

取消外键约束: SET FOREIGN_KEY_CHECKS=0;

执行 truncate tablename

然后再设置外键约束: SET FOREIGN_KEY_CHECKS=1;

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!