異常內容
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;-- 啟動外鍵約束