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

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 为技术新手提供服务
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
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年前 评论

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