精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一道經典的MySQL面試題,答案出現三次反轉

數據庫 MySQL
前幾天偶然看到大家在討論一道面試題,而且答案也不夠統一,我感覺蠻有意思,在此就做一個解讀,整個過程中確實會有幾處反轉。

 前幾天偶然看到大家在討論一道面試題,而且答案也不夠統一,我感覺蠻有意思,在此就做一個解讀,整個過程中確實會有幾處反轉。 

[[279720]]

我們先來看下題目:

一張表,里面有ID自增主鍵,當insert了17條記錄之后,刪除了第15,16,17條記錄,再把MySQL重啟,再Insert一條記錄,這條記錄的ID是18還是15.

和后面的一些題目整體來看,難度不大,都是一些看起來很基礎的問題,但是這道題目引起了我的注意,因為這道題目的背景過于開放,所以答案也是不固定的,而這也是我們在技術學習中需要保持的嚴謹態度。

首先這道題整體來看,想表達的是對于MySQL中自增列的理解。

按照我們常規理解的邏輯,ID自增,應該是18,按照這個邏輯怎么都不應該是15吧?

但是這個答案對嗎?顯然不是,我們進入第一輪反轉。

確實,對于自增列的問題,這個是MySQL里面飽受詬病的老問題了。如果節點重啟,會從數據列中按照max(id)+1的方式來處理,在多環境歷史數據歸檔的情況下,如果主庫重啟,很可能會出現數據不一致的情況,記得在MySQL bug中很多人留言,說十多年前的老問題了,怎么還不解決。

而在OpenWorld上面Percona CEO Peter也再次提到了這個問題。 

一道經典的MySQL面試題,答案出現三次反轉

我認真查了一下這個bug的歷史,巧合的是,這個問題是Peter在十幾年前提出的,時光荏苒,一直沒有修復。 

一道經典的MySQL面試題,答案出現三次反轉

好的,按照MySQL bug的思路來理解,答案應該是15了。

但是這個答案對嗎?顯然不是,我們進入第二輪反轉。

這個題目的背景是不夠清晰的,這個表的存儲引擎沒有說是InnoDB還是MyISAM,所以存在不確定性,這么說的意義在于,自增列的信息在MyISAM和InnoDB中的維護邏輯是不大一樣的,在MyISAM中是存儲持久化在文件中的,當數據庫重啟之后,是可以通過持久化的信息持續對ID進行自增的,而InnoDB的自增列信息既不在.frm文件,也不在.ibd文件中,所以在此啟動的時候會按照max(id)+1的算法進行修復。

所以如果是MyISAM,則答案應該是18,而如果是InnoDB,則答案是15。

我們可以綜合對比,用一個小的測試來模擬復現,我們選擇的是MySQL 5.7環境。

為了對比明顯,我們創建兩張表test_innodb和test_myisam,分別對應InnoDB和MyISAM存儲引擎,來做同樣的操作,看看重啟后的差異情況。 

  1. >>create table test_innodb(id int primary key auto_increment,name varchar(30)) engine=innodb;>>create table test_myisam(id int primary key auto_increment,name varchar(30)) engine=myisam; 

插入幾行數據,查看數據: 

  1. >>insert into test_innodb(namevalues('aa'),('bb'),('cc');Query OK, 3 rows affected (0.00 sec)Records: 3 Duplicates: 0 Warnings: 0 
  2. >>insert into test_myisam(namevalues('aa'),('bb'),('cc'); Query OK, 3 rows affected (0.00 sec)Records: 3 Duplicates: 0 Warnings: 0 

查看兩張表的數據情況,數據是完全一樣。 

  1. >>select *from test_innodb;+----+------+| id | name |+----+------+| 1 | aa || 2| bb || 3 | cc |+----+------+3 rows in set (0.00 sec) 
  2. >>select *from test_myisam;+----+------+| id | name |+----+------+| 1 | aa || 2| bb || 3 | cc |+----+------+3 rows in set (0.00 sec) 

在1,2,3的基礎上,我們繼續插入值為5,跳過id值為4。 

  1. >>insert into test_innodb(id,namevalues(5,'ee');Query OK, 1 row affected (0.00 sec) 
  2. >>insert into test_myisam(id,namevalues(5,'ee'); Query OK, 1 row affected (0.00 sec) 

此時查看test_innodb自增列已經開始增長,值為6。 

  1. >>show create table test_innodb\G CREATE TABLE `test_innodb` ( `id` int(11) NOT AUTO_INCREMENT, `namevarchar(30) DEFAULT , PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf81 row in set (0.00 sec) 

刪除id=5的記錄 

  1. >>delete from test_innodb where id=5;Query OK, 1 row affected (0.01 sec) 

刪除記錄之后,自增列還是保持不變。 

  1. >>show create table test_innodb\G CREATE TABLE `test_innodb` ( `id` int(11) NOT AUTO_INCREMENT, `namevarchar(30) DEFAULT , PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf81 row in set (0.00 sec) 

同理test_myisam也做同樣的測試,結果是完全一樣的,在此略過日志。

我們停止數據庫 

  1. >>shutdown;Query OK, 0 rows affected (0.00 sec) 

重啟數據庫 

  1. #mysqld_safe --defaults-file=/data/mysql_5723/my.cnf & 

此時查看test_innodb和test_myisam的自增列就開始出現差異了。

MyISAM存儲引擎的表test_myisam的自增列還是不變,為6。 

  1. >>show create table test_myisam\G CREATE TABLE `test_myisam` ( `id` int(11) NOT AUTO_INCREMENT, `namevarchar(30) DEFAULT , PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf81 row in set (0.00 sec) 

而InnoDB存儲引擎的表test_innodb的自增列卻變為了4。 

  1. >>show create table test_innodb\G *************************** 1. row *************************** Table: test_innodbCreate TableCREATE TABLE `test_innodb` ( `id` int(11) NOT AUTO_INCREMENT, `namevarchar(30) DEFAULT , PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 

我們繼續插入一條數據,保持id列自增。 

  1. >>insert into test_innodb(namevalues('ee');Query OK, 1 row affected (0.00 sec) 
  2. >>insert into test_myisam(namevalues('ee'); Query OK, 1 row affected (0.00 sec) 

可以看到兩張表的id列已經分道揚鑣了。 

  1. >>select *from test_innodb; +----+------+| id | name |+----+------+| 1 | aa || 2 | bb || 3 | cc || 4 | ee |+----+------+4 rows in set (0.00 sec) 
  2. >>select *from test_myisam; +----+------+| id | name |+----+------+| 1 | aa || 2 | bb || 3 | cc || 6 | ee |+----+------+4 rows in set (0.00 sec) 

小結:對于MyISAM和InnoDB的表,因為存儲引擎對于自增列的實現機制不同,ID值也可能會有所不同,對于InnoDB存儲引擎的表,ID是按照max(id)+1的算法來計算的。 

[[279721]]

但是這個答案對嗎?顯然不是,因為還是不夠嚴謹,我們進入第三輪反轉。

這個問題不夠嚴謹是因為技術是逐步發展的,這個問題在MySQL 8.0中有了答案,對于InnoDB的自增列信息,如果斷電之后會直接丟失,很可能造成級聯從庫間的數據同步出現問題,而在MySQL 8.0之后,這個信息寫入了共享表空間中,所以服務重啟之后,還是可以繼續追溯這個自增列的ID變化情況的。

限于篇幅,因為測試日志是很相似的,我就直接給出測試后的日志,這是在數據庫重啟之后的自增列情況,可以看到test_innodb和test_myisam的自增列是完全一樣的。 

  1. mysql> show create table test_myisam\G*************************** 1. row *************************** Table: test_myisamCreate TableCREATE TABLE `test_myisam` ( `id` int(11) NOT AUTO_INCREMENT, `namevarchar(30) DEFAULT , PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci1 row in set (0.00 sec) 
  2. mysql> show create table test_innodb\G *************************** 1. row *************************** Table: test_innodbCreate TableCREATE TABLE `test_innodb` ( `id` int(11) NOT AUTO_INCREMENT, `namevarchar(30) DEFAULT , PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci1 row in set (0.00 sec) 

我們做一個小結:

在MySQL 8.0之前:

1)如果是MyISAM表,則數據庫重啟后,ID值為18

2)如果是InnoDB表,則數據庫重啟后,ID值為15

在MySQL 8.0開始,

1)如果是MyISAM表,則數據庫重啟后,ID值為18

2)如果是InnoDB表,則數據庫重啟后,ID值為18

此處需要補充的是,對于ID自增列,在MySQL 5.7中可以使用sys schema來進行有效監控了,可以查看視圖schema_auto_increment_columns 來進行列值溢出的有效判斷。

更難能可貴的是,如果是MySQL 5.7版本以下,雖然沒有sys schema特性,但是可以復用MySQL 5.7中的schema_auto_increment_columns 的視圖語句,也是可以對列值溢出進行有效判斷的。

 

責任編輯:華軒 來源: 今日頭條
相關推薦

2015-04-22 12:19:42

JAVAJAVA面試題答案解析

2025-05-20 08:38:03

2009-06-22 13:43:00

java算法

2009-09-08 17:45:06

CCNA考題

2020-11-11 09:19:37

前端優化面試

2024-10-11 17:09:27

2023-04-27 09:08:19

JavaScript隱式類型轉換

2016-05-05 17:45:43

Spring面試題答案

2018-03-06 15:30:47

Java面試題

2011-05-23 11:27:32

面試題面試java

2018-03-02 08:50:54

Linux面試題offer技巧

2019-08-13 08:43:07

JavaScript前端面試題

2013-05-29 10:36:08

Android開發移動開發字符串反轉

2023-02-04 18:24:10

SeataJava業務

2009-08-11 10:12:07

C#算法

2009-08-11 14:59:57

一道面試題C#算法

2014-07-28 14:00:40

linux面試題

2022-04-08 07:52:17

CSS面試題HTML

2009-08-11 15:09:44

一道面試題C#算法

2017-11-21 12:15:27

數據庫面試題SQL
點贊
收藏

51CTO技術棧公眾號

亚洲va欧美va人人爽| 国产91丝袜在线播放九色| 国产一区二区日韩精品欧美精品| 久草福利视频在线| mm1313亚洲国产精品美女| 成人综合在线网站| 国产精品美女久久久久av超清| 永久免费看mv网站入口| 欧美理论电影在线精品| 欧美色电影在线| 妞干网在线视频观看| 日本免费视频在线观看| 99久久精品免费| 国产一区二区在线播放| 日本一区二区三区免费视频| 91亚洲成人| 亚洲毛片一区二区| 精品国产aⅴ一区二区三区东京热| 天堂av中文在线观看| 亚洲色图欧洲色图婷婷| 麻豆亚洲一区| 亚洲h视频在线观看| 日韩av中文在线观看| 欧美精品videosex性欧美| 69视频在线观看免费| 中文字幕久久精品一区二区| 欧美色综合影院| 成人一对一视频| 午夜小视频在线观看| 日本一区二区免费在线| 久久综合久久综合这里只有精品| 国内精品久久久久久久久久久| 日韩精品久久理论片| 韩国美女主播一区| 久久国产在线观看| 久久久久久久久久久久久久久久久久| 亚洲品质视频自拍网| 中国免费黄色片| 欧美日韩黄网站| 91麻豆精品国产91久久久久久久久 | 成人中文视频| 国产视频久久久久| 欧美肉大捧一进一出免费视频| 婷婷综合国产| 5566中文字幕一区二区电影| 亚洲免费av一区二区三区| 色是在线视频| 懂色av中文一区二区三区天美| 农民人伦一区二区三区| 少妇视频在线| 夜夜爽夜夜爽精品视频| 国内自拍中文字幕| 在线免费观看的av| 日韩理论片一区二区| 一区一区视频| 麻豆网在线观看| 亚洲欧美福利一区二区| www.-级毛片线天内射视视| 欧美另类极品| 亚洲手机成人高清视频| 警花观音坐莲激情销魂小说| 国产激情视频在线观看| 亚洲乱码国产乱码精品精的特点 | 亚久久调教视频| 欧美在线性爱视频| 免费看毛片网站| 日韩影院精彩在线| 国产精品稀缺呦系列在线| 亚洲精品国产精品乱码视色| 久久99热这里只有精品| 成人午夜高潮视频| 亚洲第一页综合| 成人动漫在线一区| 久久久久久久免费| av在线免费观看网站| 国产精品久久一卡二卡| 亚洲一区 在线播放| 免费电影网站在线视频观看福利| 五月综合激情网| 国产精品入口免费软件| 日韩精品一级毛片在线播放| 日韩一区二区免费视频| 91丝袜美腿高跟国产极品老师| 国产精品主播视频| 国产特级黄色片| 菠萝蜜视频在线观看一区| 免费看成人av| 免费a级人成a大片在线观看| 亚洲一区在线播放| 欧美视频免费播放| 国产精品亚洲综合在线观看| 亚洲第一中文字幕在线观看| 一区二区三区四区免费| 97久久视频| 欧美亚洲视频在线观看| 亚洲视频久久久| 成人黄色国产精品网站大全在线免费观看 | 六月丁香久久丫| 在线看片第一页欧美| 国产大片免费看| 亚洲免费网站| 91在线观看网站| 黄色在线视频观看网站| 亚洲乱码国产乱码精品精可以看| jizzjizzxxxx| 日韩在线观看中文字幕| 亚洲色图美腿丝袜| 免费麻豆国产一区二区三区四区| 视频一区视频二区中文字幕| 亚洲xxxx在线| 国产日韩精品在线看| 亚洲一区在线播放| 毛片毛片毛片毛| 亚洲第一福利专区| 久久久久久久影院| 国产又粗又黄又爽视频| 久久久久9999亚洲精品| 激情五月六月婷婷| 日韩成人在线一区| 亚洲人成自拍网站| 成年人午夜视频| 国产精品996| 中文字幕一区二区三区5566| 三上悠亚激情av一区二区三区| 欧美videos中文字幕| 美国美女黄色片| 天堂一区二区在线免费观看| 国产伦精品一区二区三区照片91 | 综合中文字幕亚洲| av动漫免费看| 首页亚洲中字| 91av免费观看91av精品在线| 精品人妻午夜一区二区三区四区 | 一区二区三区免费高清视频| 久久成人18免费观看| 欧美日韩一区二区视频在线观看| 成人影院在线播放| 欧美刺激脚交jootjob| 日韩av手机在线免费观看| 日本成人中文字幕在线视频| 欧美婷婷久久| 久久电影tv| 亚洲无线码在线一区观看| 国内精品福利视频| 久久综合久久鬼色| 99精品视频在线看| 亚洲日产av中文字幕| 欧美成人中文| 亚洲精品av在线播放| 国产一级生活片| 成人免费视频app| 国产视频在线观看网站| 国产精品白丝一区二区三区| www.亚洲男人天堂| 国产精品特级毛片一区二区三区| 中文字幕一区日韩精品欧美| 不用播放器的免费av| 93在线视频精品免费观看| 96精品久久久久中文字幕| a级毛片免费观看在线| 91精品国产综合久久久蜜臀图片| 国产极品国产极品| 国产91在线|亚洲| 日本中文字幕网址| 亚洲日产av中文字幕| 国产精品男女猛烈高潮激情| yiren22亚洲综合伊人22| 欧美日韩久久一区| 波多野结衣亚洲色图| 成人a免费在线看| 国产女女做受ⅹxx高潮| 菠萝蜜一区二区| 亚洲自拍偷拍色图| 丁香花视频在线观看| 日韩精品极品视频免费观看| 欧美国产一级片| 亚洲欧美综合另类在线卡通| 在线观看网站黄| 国产日韩亚洲| 永久域名在线精品| 国产成人一二| 国产精品旅馆在线| 天天色天天射天天综合网| 日韩av网站电影| 一级特黄特色的免费大片视频| 亚洲欧美国产高清| 亚洲欧美色图视频| 国产综合色在线| 久久综合九色综合88i| 日韩欧美网址| 国产日产精品一区二区三区四区| 亚洲成人短视频| 久久久久999| 色就是色亚洲色图| 欧美一区二区在线免费观看| 国产欧美日韩另类| 1024成人网色www| www.超碰97| 国产精品影视在线| 爆乳熟妇一区二区三区霸乳| 欧美日本精品| 亚洲精品在线免费看| 国内精品国产成人国产三级粉色| 国产精品久久久久久久天堂| 丁香高清在线观看完整电影视频| 国产亚洲欧美日韩一区二区| 国产综合在线播放| 欧美日韩成人综合天天影院| 中日韩黄色大片| 亚洲激情一二三区| 国产传媒在线看| 99久久99久久免费精品蜜臀| 九九热免费在线观看| 国产精品五区| 佐佐木明希av| 色综合天天爱| 欧洲亚洲一区二区三区四区五区| 波多野结衣在线一区二区 | 久久精品一二三| 中文字幕第3页| 国产高清不卡一区| 亚洲美女性囗交| 视频一区二区中文字幕| 日本欧美黄色片| 欧美国产高潮xxxx1819| 在线观看日本一区| 精品国产中文字幕第一页| 国内一区二区三区在线视频| 亚洲不卡视频| 亚洲中国色老太| 国产高清日韩| 成人h猎奇视频网站| 日韩不卡在线| 国产99久久精品一区二区永久免费 | 欧洲视频一区二区| 国产精品久久久久久久久久久久久久久久久 | 精品1区2区| 成人免费直播在线| av日韩免费电影| 视频国产精品| 91视频免费进入| 日韩高清一区| 高清不卡日本v二区在线| 高清一区二区| 91成人伦理在线电影| 国产999精品在线观看| 91精品国产综合久久香蕉| 久久亚洲人体| 亚洲xxxxx| 日韩欧美中文在线观看| 亚洲最大的av网站| 综合激情五月婷婷| 国产精品视频免费一区| 精品少妇一区| 免费99视频| 欧美一区二区三| 亚洲精品乱码久久久久久蜜桃91| 秋霞欧美视频| 中文字幕一区二区中文字幕| 婷婷伊人综合| 成人黄色大片网站| 久久精品盗摄| 国产精品v日韩精品v在线观看| 美国av一区二区| 污污视频在线免费| 国产91对白在线观看九色| 欧美在线一级片| 久久久精品黄色| 大地资源高清在线视频观看| 亚洲精品视频在线观看免费| 久久久久久久伊人| 欧美性生交大片免费| 亚洲男人天堂网址| 欧美高清视频在线高清观看mv色露露十八 | 国产一区在线观看视频| 亚洲成a人片在线www| 久久在线观看免费| 91香蕉国产视频| 亚洲成在人线在线播放| 中文字幕高清在线免费播放| 欧美日韩激情在线| 欧美在线 | 亚洲| 国产一区二区三区在线免费观看| 淫片在线观看| 97久久精品视频| 九七电影院97理论片久久tvb| 99se婷婷在线视频观看| 欧美日韩看看2015永久免费| 亚洲欧美日韩综合一区| 欧美激情综合| www.超碰com| 国产99久久久国产精品| 中文字幕成人动漫| 一区二区三区美女| www.五月婷婷.com| 日韩精品在线看片z| 国产三级在线观看| 欧美国产在线电影| 国产一区二区三区朝在线观看| 91久久偷偷做嫩草影院| 久久91麻豆精品一区| 欧美性猛交内射兽交老熟妇| 日韩精品成人一区二区在线| 不卡的一区二区| 国产精品伦理一区二区| 日韩三级av在线| 日韩一区国产二区欧美三区| 精品视频二区| 久久久久久久av| 国产精品xnxxcom| 午夜老司机精品| 亚洲一区二区成人| 日本成人在线免费| 亚洲欧洲精品一区二区精品久久久| 色播视频在线播放| 欧美一级黄色录像| 色三级在线观看| 国产999在线观看| 亚洲a级精品| 精品无码国产一区二区三区av| 久久99热狠狠色一区二区| 无码 人妻 在线 视频| 天天做天天摸天天爽国产一区 | 亚洲欧洲一区二区三区久久| 欧美人与牲禽动交com| 国产视频999| 日韩精品二区| 少妇激情一区二区三区| 久久这里只精品最新地址| 一区二区三区视频免费看| 日韩欧美亚洲国产另类| 国产一区久久精品| 91精品久久久久| 国产精品成人av| www.国产福利| 1区2区3区欧美| 国产精品久久婷婷| 日韩在线观看免费全集电视剧网站| 成人在线视频播放| 欧美一卡2卡3卡4卡无卡免费观看水多多| 亚洲高清成人| 中文文字幕文字幕高清| 亚洲国产aⅴ成人精品无吗| www.天堂在线| 欧美激情图片区| 97se亚洲国产一区二区三区| 国产精品视频二| www.欧美.com| 国产成人免费观看视频| 亚洲精品美女久久久| 欧美特黄aaaaaaaa大片| 日本公妇乱淫免费视频一区三区| 久久久久看片| 一级片黄色录像| 69堂国产成人免费视频| 1024在线播放| 国产伦精品一区二区三区四区免费| 亚洲精品韩国| 熟女俱乐部一区二区视频在线| 色综合亚洲欧洲| 色网站免费在线观看| 亚洲一区国产精品| 精久久久久久| 老牛影视av老牛影视av| 在线一区二区三区四区五区| 在线观看黄av| 亚洲综合在线小说| 99国产精品99久久久久久粉嫩| 91国模少妇一区二区三区| 欧美日韩精品一区二区在线播放| av理论在线观看| 国产尤物99| 日韩成人精品在线| 亚洲波多野结衣| 亚洲精品久久久久久久久久久| 蜜桃精品在线| 婷婷视频在线播放| 成人黄色大片在线观看 | 精品亚洲美女网站| 国产盗摄视频在线观看| 高清国产一区二区| 中文字幕精品视频在线观看| 日韩中文娱乐网| 国产精品超碰| 中文字幕22页| 精品日本美女福利在线观看| 国产区在线视频| 91久色国产| 老司机免费视频久久| 波多野结衣亚洲色图| 亚洲视频在线观看网站| 久久伊人精品| 久久综合久久色| 亚洲最快最全在线视频| 国产对白叫床清晰在线播放| 亚洲sss综合天堂久久| 国产亚洲毛片| 亚洲成人生活片| 尤物九九久久国产精品的特点| 一区二区三区自拍视频|