Mysql自增主鍵id不是以此逐級遞增的處理
Mysql自增主鍵id不是以此逐級遞增
一、介紹
在mysql數據庫添加數據時使用ON DUPLICATE KEY UPDATE進行數據更新時可能會出現(xiàn)id不是逐級以此遞增的,而是間斷遞增。
如id從10下次添加可能就是15或者其他的數字,兩個數字之間間隔是ON DUPLICATE KEY UPDATE執(zhí)行的次數,也就是說ON DUPLICATE KEY UPDATE在執(zhí)行更新的時候把該表主鍵進行自增加一。
如圖所示

二、問題介紹
在對于同一個表進行新增和修改時我用了兩個mapper接口方法,也就是說使用了兩次ON DUPLICATE KEY UPDATE操作,這樣就會導致該表主鍵在你更新的時候就進行自增了。等到下次insert時就會出現(xiàn)不是逐級遞增了。
三、解決方法
將數據庫的insert和update進行拆分。
自增主鍵的優(yōu)缺點
自增主鍵
這種方式是使用數據庫提供的自增數值型字段作為自增主鍵,它的優(yōu)點是:
(1)數據庫自動編號,速度快,而且是增量增長,按順序存放,對于檢索非常有利;
(2)數字型,占用空間小,易排序,在程序中傳遞也方便;
(3)如果通過非系統(tǒng)增加記錄時,可以不用指定該字段,不用擔心主鍵重復問題。
其實它的缺點也就是來自其優(yōu)點,缺點如下:
(1)因為自動增長,在手動要插入指定ID的記錄時會顯得麻煩,尤其是當系統(tǒng)與其它系統(tǒng)集成時,需要數據導入時,很難保證原系統(tǒng)的ID不發(fā)生主鍵沖突(前提是老系統(tǒng)也是數字型的)。特別是在新系統(tǒng)上線時,新舊系統(tǒng)并行存在,并且是異庫異構的數據庫的情況下,需要雙向同步時,自增主鍵將是你的噩夢;
(2)在系統(tǒng)集成或割接時,如果新舊系統(tǒng)主鍵不同是數字型就會導致修改主鍵數據類型,這也會導致其它有外鍵關聯(lián)的表的修改,后果同樣很嚴重;
(3)若系統(tǒng)也是數字型的,在導入時,為了區(qū)分新老數據,可能想在老數據主鍵前統(tǒng)一加一個字符標識(例如“o”,old)來表示這是老數據,那么自動增長的數字型又面臨一個挑戰(zhàn)。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持本站。
版權聲明:本站文章來源標注為YINGSOO的內容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網站,禁止在非maisonbaluchon.cn所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內容來源于網友推薦、互聯(lián)網收集整理而來,僅供學習參考,不代表本站立場,如有內容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。
關注官方微信