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

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 为技术新手提供服务
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
leo
最佳答案

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

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

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

2年前 评论

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

2年前 评论
leo 2年前
thebestxt

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

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

2年前 评论

解决方案

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

执行 truncate tablename

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

2年前 评论

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