「實習記錄」insert or update操作

依然是mentor要求(mentor是個嚴格的好人),insert的時候最好不要直接插入信息,先根據unique key判斷信息是否已經存在,如果存在就update,反之insert。

根據這個要求我們可以google到一個叫insert or update的方法,即on duplicate key update,只要設置一個unique key,就會自動根據其判斷是否已存在。

這是一個很好的方法,如果你沒有使用auto increment主鍵。

測試發(fā)現(xiàn)對于自增主鍵來說,只要程序進入insert,就會給主鍵值加一,也就是不論是程序實際進行的是update操作,還是insert操作出現(xiàn)錯誤(eg:主鍵重復),自增主鍵都會加一。即如果第一次insert成功,主鍵為1,中間出現(xiàn)了兩次update或是錯誤,下一次insert的主鍵就會是4。

在update操作非常多的數(shù)據集中,或是在需要轉移數(shù)據庫次數(shù)較多的情況下,這樣的操作都會帶來非常嚴重的問題。

(在mentor的指導下我測試了最新的mariadb數(shù)據庫(10.3.6),這個問題依然沒有得到解決。查找發(fā)現(xiàn)replace into同樣會出現(xiàn)這種情況。)

最后我選擇的解決方式是將insert和update拆開,先用count查找某個記錄是否存在,count會返回該記錄的數(shù)值,根據數(shù)值是否為0判斷記錄是否存在,如果以存在,就調用update,如果不存在就調用insert。

舉個栗子:

try{

if(employeeMapper.selectCount(key) !=0)

{

employeeMapper.updateByEmployee(employee);

}

else

? ? {

employeeMapper.insertSelective(employee);

}

}catch (DataAccessException e)

{

logger.info(e.getMessage());

}

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容