mysql 出現MySQLIntegrityConstraintViolationException異常

 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '140' for key 'PRIMARY'

MySQLIntegrityConstraintViolationException: key 'PRIMARY'重複條目'140',主鍵重複了,我這裏的註解是(id)重複主鍵id是140.

出現問題的原因:

    之前沒有數據庫讀寫分離,是沒有問題的,最近修改爲數據庫讀寫分離後,本地測試數據還沒有統一,兩個數據庫的這張表的數據不統一,導致讀數據獲取的主鍵id,和添加數據時添加的主鍵id衝突。發現插數據的那張表主鍵id沒有設置自增,每次添加數據時需要先獲取最大的主鍵id,加1後,再去添加數據,所以問題就出現在此。

 

解決辦法:

將主鍵設置爲自增。

   ( 如果數據庫是讀寫分離的,則數據要做到統一)

出現此問題的其他解決原因:

1.檢查是否表結構的問題(一般很少這個可能性)

2.檢查在添加數據的時候,是否帶有主鍵ID,ID是否不爲空.

如果你是因爲使用了mybatis,再添加數據的時候報的這個錯誤時:

檢查添加的方法sql語句,在插入數據後返回ID的地方,下面這裏:

 <selectKey resultType="java.lang.Long" order="BEFORE" keyProperty="productId">
          SELECT LAST_INSERT_ID()
 </selectKey>

把BEFORE改成AFTER;

 <selectKey resultType="java.lang.Long" order="AFTER" keyProperty="productId">
          SELECT LAST_INSERT_ID()
 </selectKey>
問題解決

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章