背景
在一條記錄完結時,自動向表中加入一條新的記錄,采用的是事務處理,修改現有記錄,並新增一條記錄,直接采用的insert語句會報錯
//主鍵沖突 unique constraint (XXXXXX) violated
其實沒有主鍵沖突,但是不知道為什么它會報錯,並且插入也是成功,也就說,插入成功還拋出異常,很懵逼
解決思路
插入的時候判斷該記錄是否存在,然而我們通常使用where都是在查、改、刪,很少在增中使用where。
一通倒騰
insert into 'tablename' (column1, column2,,,,,) select 各列的值 from dual where not exists (select * from tablename where 判斷條件)
這里注意兩點
- 不能有values,通常我們在insert數據時都會加上values,但是該場景下,不能加(這是我經歷的坑)
- dual不能更改,這個是oracle數據庫中內置的一個表,用於不明確的查詢源,有興趣可以查找更多的資料