MySQL外鍵約束沖突異常:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (...)


異常內容

Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`book`.`t_order`, CONSTRAINT `t_order_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `t_user` (`id`))

外鍵約束沖突,我的錯誤出在插入的 id 已經存在了,所以產生了沖突。

外鍵聯系的兩個表之間存在依賴關系,主表的還沒有的時候,從表自然也不能存在(這就是約束,主鍵要消失,你下面有從表——不行;從表要新增,你聯系的那個主表還沒創建——不行)。就像沒你老子就沒你,同理你老子還沒出生,你就要蹦出來,自然也是不行

此問題關鍵是錯誤消息出現在數據庫上,所以排錯方向也應該在此。

又一個場景,刪除存在外鍵約束的表數據時,異常:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails

解決辦法:

#存在外鍵約束的表數據無法被刪除,刪除前需要先刪除外鍵約束
SET foreign_key_checks = 0;-- 刪除外鍵約束
truncate table t_order;
truncate table t_order_item;
SET foreign_key_checks = 1;-- 啟動外鍵約束


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM