Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry

最近在調試post方法時遇到SQLIntegrityConstraintViolationException: Duplicate entry xxx for key 這個錯誤,記錄一下,方便後續查看
這個錯誤的意思是:違反唯一約束條件,也即該字段設置是唯一的,但是數據插入時,想要報錯相同記錄的數據。
錯誤信息如下:

{
    "timestamp": "2019-11-16 13:29:20",
    "status": 500,
    "error": "Internal Server Error",
    "message": "\r\n### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '2' for key 'sutra_items_lesson'\r\n### The error may involve cn.htz.chs.mapper.SutraItemsMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO sutra_items  ( sutra_id, title, description, original, audio_id, lyric_id, lesson, played_count, duration, hash, create_by, create_time, last_update_by, last_update_time )  VALUES  ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '2' for key 'sutra_items_lesson'\n; Duplicate entry '2' for key 'sutra_items_lesson'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '2' for key 'sutra_items_lesson'",
    "path": "/put/sutraitems/item"
}

發現在建立數據庫表字段時,lesson的字段設置了唯一索引,但是此時我們還是想讓lesson支持重複的數據插入,可以有如下解決方法

  1. 使用可視化工具打開數據庫,在sutra_items 表中查看索引,檢查索引類型,選擇Normal,保存後,問題解決
  2. 使用可視化工具打開數據庫,在sutra_items 表中查看索引,選擇對應報錯的字段索引名稱,直接刪除改索引,新增限定唯一值的索引,比如新增title的唯一值索引,索引類型爲Unique,索引方法默認爲BTREE

上面都檢查完畢,如果還是有問題,需要檢查一下插入相關的代碼,檢查字段插入是否正確,保證插入的數據爲唯一的

結論:
設置數據庫字段時,要留心每個字段的屬性,要根據每個字段的詳細需求進行限定設置是否允許唯一性。

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