成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

一文聊聊MySQL中的自增主鍵

本篇文章帶大家深入了解下MySQL中的自增主鍵,希望對大家有所幫助!

一文聊聊MySQL中的自增主鍵

一、自增值保存在哪兒?

不同的引擎對于自增值的保存策略不同

1.MyISAM引擎的自增值保存在數據文件中

2.InnoDB引擎的自增值,在MySQL5.7及之前的版本,自增值保存在內存里,并沒有持久化。每次重啟后,第一次打開表的時候,都會去找自增值的最大值max(id),然后將max(id)+步長作為這個表當前的自增值

select max(ai_col) from table_name for update;

在MySQL8.0版本,將自增值的變更記錄在了redo log中,重啟的時候依靠redo log恢復重啟之前的值

二、自增值修改機制

如果字段id被定義為AUTO_INCREMENT,在插入一行數據的時候,自增值的行為如下:

1.如果插入數據時id字段指定為0、null或未指定值,那么就把這個表當前的AUTO_INCREMENT值填到自增字段

2.如果插入數據時id字段指定了具體的值,就直接使用語句里指定的值

假設,某次要插入的值是X,當前的自增值是Y

1.如果X<Y,那么這個表的自增值不變

2.如果X>=Y,就需要把當前自增值修改為新的自增值

新的自增值生成算法是:從auto_increment_offset(初始值)開始,以auto_increment_increment(步長)為步長,持續疊加,直到找到第一個大于X的值,作為新的自增值

三、自增值的修改時機

創建一個表t,其中id是自增主鍵字段、c是唯一索引,建表語句如下:

CREATE TABLE `t` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `c` int(11) DEFAULT NULL,   `d` int(11) DEFAULT NULL,   PRIMARY KEY (`id`),   UNIQUE KEY `c` (`c`) ) ENGINE=InnoDB;

假設,表t里面已經有了(1,1,1)這條記錄,這時再執行一條插入數據命令:

insert into t values(null, 1, 1);

執行流程如下:

1.執行器調用InnoDB引擎接口寫入一行,傳入的這一行的值是(0,1,1)

2.InnoDB發現用于沒有指定自增id的值,獲取表t當前的自增值2

3.將傳入的行的值改成(2,1,1)

4.將表的自增值改成3

5.繼續執行插入數據操作,由于已經存在c=1的記錄,所以報Duplicate key error(唯一鍵沖突),語句返回

對應的執行流程圖如下:
一文聊聊MySQL中的自增主鍵
在這之后,再插入新的數據行時,拿到的自增id就是3。出現了自增主鍵不連續的情況

唯一鍵沖突和事務回滾都會導致自增主鍵id不連續的情況

四、自增鎖的優化

自增id鎖并不是一個事務鎖,而是每次申請完就馬上釋放,以便允許別的事務再申請

但在MySQL5.0版本的時候,自增鎖的范圍是語句級別。也就是說,如果一個語句申請了一個表自增鎖,這個鎖會等語句執行結束以后才釋放

MySQL5.1.22版本引入了一個新策略,新增參數innodb_autoinc_lock_mode,默認值是1

1.這個參數設置為0,表示采用之前MySQL5.0版本的策略,即語句執行結束后才釋放鎖

2.這個參數設置為1

  • 普通insert語句,自增鎖在申請之后就馬上釋放
  • 類似insert … select這樣的批量插入數據的語句,自增鎖還是要等語句結束后才被釋放

3.這個參數設置為2,所有的申請自增主鍵的動作都是申請后就釋放鎖

為了數據的一致性,默認設置為1
一文聊聊MySQL中的自增主鍵
如果sessionB申請了自增值以后馬上就釋放自增鎖,那么就可能出現這樣的情況:

  • sessionB先插入了兩行數據(1,1,1)、(2,2,2)
  • sessionA來申請自增id得到id=3,插入了(3,5,5)
  • 之后,sessionB繼續執行,插入兩條記錄(4,3,3)、(5,4,4)

當binlog_format=statement的時候,兩個session是同時執行插入數據命令的,所以binlog里面對表t2的更新日志只有兩種情況:要么先記sessionA的,要么先記錄sessionB的。無論是哪一種,這個binlog拿到從庫執行,或者用來恢復臨時實例,備庫和臨時實例里面,sessionB這個語句執行出來,生成的結果里面,id都是連續的。這時,這個庫就發生了數據不一致

解決這個問題的思路:

1)讓原庫的批量插入數據語句,固定生成連續的id值。所以,自增鎖直到語句執行結束才釋放,就是為了達到這個目的

2)在binlog里面把插入數據的操作都如實記錄進來,到備庫執行的時候,不再依賴于自增主鍵去生成。也就是把innodb_autoinc_lock_mode設置為2,同時binlog_format設置為row

如果有批量插入數據(insert … select、replace … select和load data)的場景時,從并發插入數據性能的角度考慮,建議把innodb_autoinc_lock_mode設置為2,同時binlog_format設置為row,這樣做既能并發性,又不會出現數據一致性的問題

對于批量插入數據的語句,MySQL有一個批量申請自增id的策略:

1.語句執行過程中,第一次申請自增id,會分配1個

2.1個用完以后,這個語句第二次申請自增id,會分配2個

3.2個用完以后,還是這個語句,第三次申請自增id,會分配4個

4.依次類推,同一個語句去申請自增id,每次申請到的自增id個數都是上一次的兩倍

insert into t values(null, 1,1); insert into t values(null, 2,2); insert into t values(null, 3,3); insert into t values(null, 4,4); create table t2 like t; insert into t2(c,d) select c,d from t; insert into t2 values(null, 5,5);

insert … select,實際上往表t2中插入了4行數據。但是,這四行數據是分三次申請的自增id,第一次申請到了id=1,第二次被分配了id=2和id=3,第三次被分配到id=4到id=7

由于這條語句實際上只用上了4個id,所以id=5到id=7就被浪費掉了。之后,再執行insert into t2 values(null, 5,5),實際上插入了的數據就是(8,5,5)

這是主鍵id出現自增id不連續的第三種原因

五、自增主鍵用完了

自增主鍵字段在達到定義類型上限后,再插入一行記錄,則會報主鍵沖突的錯誤

一文聊聊MySQL中的自增主鍵

CREATE TABLE t ( id INT UNSIGNED auto_increment PRIMARY KEY ) auto_increment = 4294967295; INSERT INTO t VALUES(NULL); INSERT INTO t VALUES(NULL);

第一個insert語句插入數據成功后,這個表的AUTO_INCREMENT沒有改變(還是4294967295),就導致了第二個insert語句又拿到相同的自增id值,再試圖執行插入語句,報主鍵沖突錯誤

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
多毛小姐BGMBGMBGM| 国产乱子伦60女人的皮视频| 大伊香蕉精品一区视频在线| 国产SM残忍打屁股调教视频| 国产无套无码AⅤ在线观看| 黑人精品一区二区| 久久老子午夜精品无码| 欧美国产成人精品二区芒果视频| 欧亚激情偷乱人伦小说专区| 熟妇人妻不卡中文字幕| 亚洲 另类 日韩 制服 无码| 亚洲欧洲AV综合色无码| 中文字幕亚洲乱码熟女1区2区| JIZZJIZZ日本护士视频| 丰满人妻被黑人猛烈进入| 国产日韩一区在线精品 | 黑人大战日本人妻嗷嗷叫| 久久久AV波多野一区二区| 欧美激情国产精品视频一区二区 | 久久综合给合久久国产免费| 欧美牲交A欧美牲交AⅤ免费真| 三个男人让我爽了一夜| 亚洲AV成人片无码www妖精| 一本加勒比波多野结衣| WWW.色五月.COM| 国产精彩乱子真实视频| 久久99国产精品久久99| 欧一欧二欧三乱码| 午夜三级A三级三点窝| 野花日本大全免费观看10电影| WWW.色五月.COM| 国产热の有码热の无码视频| 看娇妻被两朋友共用| 日日猛噜噜狠狠扒开双腿小说| 亚洲AV一宅男色影视| 337P日本大胆欧美裸体艺术| 国产97色在线 | 国产| 久久精品99久久香蕉国产| 人妻少妇中文字幕| 亚洲AV中文乱码一区二| ACG性奴成熟人妻全彩漫画| 国产精品爱久久久久久久小说 | 亚洲在AV极品无码天堂手机版| AV狠狠色丁香婷婷综合久久| 国产精品毛片一区二区| 麻豆国产尤物AV尤物在线观看| 少妇荡乳情欲办公室456视频| 激情综合一区二区三区| 欧美日韩精品视频一区二区| 小妖精又紧又湿高潮H视频69| 中文在线天堂А√在线| 国产旡码高清一区二区三区| 蜜桃AV一区二区| 无码高潮少妇毛多水多水免费| 征服丰满人妻老师| 国产麻豆一精品一AV一免费软件| 妺妺窝人体色WWW网| 校长办公室岔开腿呻吟| AV区无码字幕中文色| 狠狠躁日日躁夜夜躁2022麻豆| 人妻去按摩店被黑人按中出| 亚洲色欲色欲WWW在线播放| 荡公乱妇第1章95| 老熟妇XXXⅩHD老熟女| 无人区码一码二码三码| HD专干中国老太婆| 精品无码久久久久久国产| 色欲AV综合AV无码AⅤ| 与上司出轨的人妻| 国产午夜精品无码理论片| 人妻体内射精一区二区三区| 夜夜躁天天躁很很躁| 国产精品自在拍首页视频8| 欧美一区二区三区红桃小说 | 19部MACBOOKPRO日本| 国语自产少妇精品视频蜜桃| 日本护士毛茸茸高潮| 在线看AV的网站| 韩国日本三级在线观看| 色欲蜜臀AV在线播放| 97精品国产手机| 久久99精品久久久久蜜芽| 无码久久一区二区| 成 人 黄 色 网 站 视频 S色 | 果冻传媒蜜桃传媒精东豆| 日日摸夜夜添夜夜添亚洲女人| 综合无码精品人妻一区二区三区 | 亚洲中文字幕无码中文字在线| 国产精品亚洲А∨无码播放麻豆| 人妻中文字幕在线| 18亚洲AV无码成人国产| 久久电影网午夜鲁丝片伦| 午夜精品一区二区三区在线视| 亚洲AV无码专区亚洲AV| 丁香花在线电影小说观看| 欧美丰满熟妇BBBBBB性亚洲| 野花香在线观看免费观看大全动漫 | 久久AV无码精品人妻系列| 午夜.DJ高清在线观看免费7| 大伊香蕉精品一区视频在线| 欧洲洲一区二区精华液| 18禁动漫无码无遮挡免费看| 久久久久久精品免费看SSS| 亚洲成AV人片乱码色午夜| 国产精品无码久久久久久久久久| 日韩VS欧美VS亚洲VS无码| JAPANESE強姦するAV| 免费无码AV片在线观看潮喷| 一本久久A久久免费精品不卡| 精东传媒剧国产MV的特点| 亚洲AⅤ成人精品无码| 国产精品高潮呻吟AV久久无码 | 国产大片内射1区2区| 上司的丰满人妻中文字幕| 锕锕锕锕锕锕锕好疼免费看网站 | 久久99热精品免费观看牛牛| 亚洲精品国产成人99久久6| 国产又猛又黄又爽| 小寡妇高潮喷水了| 国产精品亚洲二区在线观看| 完整版免费AV片| 国产精品IGAO视频| 乌克兰少妇XXXX做受| 国产成人亚洲精品另类动态图| 少妇性SEXBBWZⅩX| 丰满熟妇人妻AV无码区| 色欲av蜜臀一区二区四区| 超碰97人人模人人爽人人喊| 日本欧美一区二区三区乱码| 成熟女人牲交片免费观看视频| 人人妻人人爽日日人人| 成人区精品一区二区不卡| 日韩人妻无码精品-专区| 成长人短视频B站| 少妇被躁爽到高潮无码人狍大战| 高黄暴H日本在线观看| 玩弄JAPAN白嫩少妇HD小说| 国产麻豆精品精东影业AV网站| 性XXXXX欧美极品少妇| 韩漫漫画无遮挡免费| 亚洲日韩久久综合中文字幕| 久久理论片午夜琪琪电影网| 中文无码乱人伦中文视频在线| 男生把QQ放进女生的QQ里在线| CHINA末成年VIDEO学生| 日本一区二区在线播放| 国产MV在线天堂MV免费观看| 午夜亚洲精品久久久久久| 精品国产午夜福利在线观看| 一本无码中文字幕在线观| 妺妺自愿做我的性玩具| YOUJIZZ丰满熟妇| 日韩人妻精品无码一区二区三区| 国产AV午夜精品一区二区三区| 无码少妇一区二区三区浪潮av| 韩国三级中文字幕HD久久精品| 亚洲人妻在线视频| 免费高清中文字幕MV| 扒开双腿疯狂进出爽爽爽视频| 少妇饥渴XXHD麻豆XXHD?| 国产无人区码SUV| 一二三四日本中文在线| 欧美精品VIDEOSEX极品| 丰满少妇被猛烈进入无码| 性高湖久久久久久久久| 久久九九久精品国产88| AAA少妇高潮大片免费看| 色欲午夜无码久久久久久| 国产微拍精品一区二区| 一女被两男吃奶玩乳尖| 青青草原精品99久久精品66| 国产成人精品午夜福利在线播放 | 牛牛影视亚洲AV成人片| 第一次处破女01免费观看| 午夜精品久久久久久99热| 久久久久久精品免费免费软件| AV无码AV在线A∨天堂APP| 挺进邻居漂亮的娇妻| 久久精品亚洲中文字幕无码网站| AV人摸人人人澡人人超碰| 无码国产精品一区二区免费I6| 久久97精品久久久久久久不卡| 99久久精品费精品国产一区二区| 少妇高潮惨叫久久久久久电影| 欢迎来到精灵の森林1到四集| 2023无人区码一码二码三码| 色狠狠熟女AV一区二区三区| 激情内射人妻1区2区3区| AV天堂东京热无码专区| 无遮挡H肉动漫在线播放| 看全色黄大色黄女片爽在线看| 成人无码区免费AⅤ片丝瓜视频| 亚洲成A人片在线观看WWW| 欧美裸体XXXX极品少妇| 国产熟女一区二区三区四区五区| 中文精品一区二区三区四区| 天美传媒MV免费观看完整| 看中国日B大片大片| 国产爆乳成人AV在线播放| 伊人久久大香线蕉AⅤ色|