Mysql自增主鍵id不是以此逐級遞增的處理
Mysql自增主鍵id不是以此逐級遞增
一、介紹
在mysql數(shù)據(jù)庫添加數(shù)據(jù)時使用ON DUPLICATE KEY UPDATE進(jìn)行數(shù)據(jù)更新時可能會出現(xiàn)id不是逐級以此遞增的,而是間斷遞增。
如id從10下次添加可能就是15或者其他的數(shù)字,兩個數(shù)字之間間隔是ON DUPLICATE KEY UPDATE執(zhí)行的次數(shù),也就是說ON DUPLICATE KEY UPDATE在執(zhí)行更新的時候把該表主鍵進(jìn)行自增加一。
如圖所示
二、問題介紹
在對于同一個表進(jìn)行新增和修改時我用了兩個mapper接口方法,也就是說使用了兩次ON DUPLICATE KEY UPDATE操作,這樣就會導(dǎo)致該表主鍵在你更新的時候就進(jìn)行自增了。等到下次insert時就會出現(xiàn)不是逐級遞增了。
三、解決方法
將數(shù)據(jù)庫的insert和update進(jìn)行拆分。
自增主鍵的優(yōu)缺點(diǎn)
自增主鍵
這種方式是使用數(shù)據(jù)庫提供的自增數(shù)值型字段作為自增主鍵,它的優(yōu)點(diǎn)是:
(1)數(shù)據(jù)庫自動編號,速度快,而且是增量增長,按順序存放,對于檢索非常有利;
(2)數(shù)字型,占用空間小,易排序,在程序中傳遞也方便;
(3)如果通過非系統(tǒng)增加記錄時,可以不用指定該字段,不用擔(dān)心主鍵重復(fù)問題。
其實(shí)它的缺點(diǎn)也就是來自其優(yōu)點(diǎn),缺點(diǎn)如下:
(1)因?yàn)樽詣釉鲩L,在手動要插入指定ID的記錄時會顯得麻煩,尤其是當(dāng)系統(tǒng)與其它系統(tǒng)集成時,需要數(shù)據(jù)導(dǎo)入時,很難保證原系統(tǒng)的ID不發(fā)生主鍵沖突(前提是老系統(tǒng)也是數(shù)字型的)。特別是在新系統(tǒng)上線時,新舊系統(tǒng)并行存在,并且是異庫異構(gòu)的數(shù)據(jù)庫的情況下,需要雙向同步時,自增主鍵將是你的噩夢;
(2)在系統(tǒng)集成或割接時,如果新舊系統(tǒng)主鍵不同是數(shù)字型就會導(dǎo)致修改主鍵數(shù)據(jù)類型,這也會導(dǎo)致其它有外鍵關(guān)聯(lián)的表的修改,后果同樣很嚴(yán)重;
(3)若系統(tǒng)也是數(shù)字型的,在導(dǎo)入時,為了區(qū)分新老數(shù)據(jù),可能想在老數(shù)據(jù)主鍵前統(tǒng)一加一個字符標(biāo)識(例如“o”,old)來表示這是老數(shù)據(jù),那么自動增長的數(shù)字型又面臨一個挑戰(zhàn)。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Windows10下mysql 8.0.12 解壓版安裝圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows10下mysql 8.0.12 解壓版安裝圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09工作中常用的mysql語句分享 不用php也可以實(shí)現(xiàn)的效果
本文給大家介紹幾條比較有用的MySQL的SQL語句,可能很多人都通過PHP來實(shí)現(xiàn)這些功能,其實(shí)數(shù)據(jù)也是能實(shí)現(xiàn)很多功能的2012-05-05SQL重復(fù)記錄查詢 查詢多個字段、多表查詢、刪除重復(fù)記錄的方法
下面小編就為大家?guī)硪黄猄QL重復(fù)記錄查詢 查詢多個字段、多表查詢、刪除重復(fù)記錄的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09MySQL中進(jìn)行數(shù)據(jù)的加密和解密存儲的操作方法
在MySQL中,我們可以使用對稱加密算法和非對稱加密算法對數(shù)據(jù)進(jìn)行加密和解密存儲,通過合理選擇加密算法和密鑰管理,可以有效提高數(shù)據(jù)的安全性,防止敏感信息的泄露和非法獲取,下面給大家分享MySQL中進(jìn)行數(shù)據(jù)的加密和解密存儲方法,感興趣的朋友一起看看吧2024-05-05關(guān)于Mysql查詢帶單引號及插入帶單引號字符串問題
本文主要介紹的是用mysql_real_escape_string對用戶提交的表單數(shù)據(jù)進(jìn)行轉(zhuǎn)義處理和通過addslashes以及mysql_escape_string這3個類似功能的函數(shù)用法區(qū)別2013-04-04