最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL8自增主鍵變化圖文詳解

 更新時間:2022年04月18日 08:16:14   作者:濤姐濤哥  
眾所周知MySQL 的主鍵可以是自增的,下面這篇文章主要給大家介紹了關(guān)于MySQL8自增主鍵變化的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

一、簡述

MySQL版本從5直接大躍進到8,相信MySQL8一定會有很多令人意想不到的改進,如果不想只會CRUD可以看看。

比如系統(tǒng)表引擎的變化-全部換成事務型的InnoDB。

MySQL5.7系統(tǒng)部引擎

MySQL8系統(tǒng)引擎

上圖可以看到,MySQL5.7的系統(tǒng)表引擎有MEMORY、InnnoDB和MyISAM三種,但MySQL8的系統(tǒng)表引擎都換成了InnoDB。MySQL8新特性還有很多,接下來進入正題康康它的自增主鍵。

二、MySQL自增主鍵

為什么MySQL8新特性會修改自增主鍵屬性?

在MySQL8.0之前,自增主鍵 AUTO_INCREMENT 的值如果大于max(primary key) +1,那么在MySQL重啟后,則會重置 AUTO_INCREMENT = max(primary key)+1 的值,這種現(xiàn)象在某些情況下會導致業(yè)務主鍵沖突或者其他難以發(fā)現(xiàn)的一些問題。

MySQL官網(wǎng)解釋自增ID沖突問題

因為在MySQL5.7中,對于自增主鍵的分配規(guī)則是由InnoDB數(shù)據(jù)字典內(nèi)部一個計數(shù)器來決定的,而該計數(shù)器維護在了內(nèi)存中,并不會持久化到磁盤中,此時硬盤中并無數(shù)據(jù),當數(shù)據(jù)庫重啟的時候,該計數(shù)器會被初始化為: auto_increment = max(primary key)+1。

如何解決自增主鍵沖突問題?

這個問題一直到MySQL8.0才解決。

8.0版本將會對 AUTO_INCREMENT 值進行持久化,所以即使MySQL重啟后該值也不會改變。

即其將自增主鍵的計數(shù)器持久化到了重做日志中,每次計數(shù)器發(fā)生改變都會將其寫入到重做日志中,如果這個時候數(shù)據(jù)庫重啟了,那么InnoDB數(shù)據(jù)字典會根據(jù)重做日志中的信息來初始化計數(shù)器的內(nèi)存值,就可以恢復到了上次關(guān)閉數(shù)據(jù)庫前的狀態(tài),通過自增ID持久化來避免8.0之前可能會出現(xiàn)的問題。

三、自增主鍵測試

分別在MySQL5和MySQL8上進行自增主鍵測試。

1、MySQL5.7自增主鍵

在MySQL5.7中的,這里我們先創(chuàng)建一個數(shù)據(jù)表,這個數(shù)據(jù)表中設置一個自增列。

CREATE TABLE t_test_auto_increment_tjt(
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
  `test_key` varchar(50) NOT NULL COMMENT '名稱',
  `test_value` varchar(50) DEFAULT NULL COMMENT '值',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='測試主鍵自增表';

然后向自增主鍵表中添加了4條記錄,表中的四條添加的記錄的id字段值就分別為: 1、2、3、4。

INSERT INTO t_test_auto_increment_tjt(id, test_key, test_value) VALUES
('0','吞噬星空','停更'),
('0','水斗大陸','可以停播了'),
('0','武神主宰','裝B還得看塵少'),
('0','完美世界','yyds')

插入數(shù)據(jù)的SQL添加的是0,其實就是默認賦值,表 t_test_auto_increment_tjt 中的自增列是不可以添加0或者null的,那么這個時候表中的四條添加的記錄的id字段值就分別為: 11、2、3、4。

接下來,將表中的id為4的字段刪除。

DELETE FROM t_test_auto_increment_tjt WHERE id = 4

然后,繼續(xù)在表中添加一條記錄,執(zhí)行之后我們可以發(fā)現(xiàn),此時自增主鍵的ID結(jié)果是5。

INSERT INTO t_test_auto_increment_tjt(id, test_key, test_value) VALUES ('0','完美世界','yyds-YYDS')

因為我們前面已經(jīng)將表中id為4的記錄刪除了,這個時候下一次自增的時候即使表中沒有id為4的字段了,但是這個時候我們也不會添加4,而是添加5。其實這個時候就是自增主鍵的值auto_increment 大于了max(primary key)+1。

再接下來,將表中的id為5的記錄刪除。

DELETE FROM t_test_auto_increment_tjt WHERE id = 5

最后,重啟MySQL數(shù)據(jù)庫,再向表中添加一條記錄。

INSERT INTO t_test_auto_increment_tjt(id, test_key, test_value) VALUES ('0','完美世界','yyds-YYDS-restart')

上圖可以看到,重啟后 重啟后 重啟后 執(zhí)行的結(jié)果中添加的記錄的id值為 : 4, 按之前的操作來看4和5已經(jīng)被刪除了,那么添加的就應該是6,為什么是4呢?

因為在MySQL5.7中,自增主鍵的分配規(guī)則是由InnoDB數(shù)據(jù)字典內(nèi)部一個計數(shù)器來決定的,而該計數(shù)器維護在了內(nèi)存中,并不會持久化到磁盤中,此時硬盤中并無數(shù)據(jù),當數(shù)據(jù)庫重啟之后該計數(shù)器會被初始化為: auto_increment = max(primary key)+1,所以記錄的id=4,而不是6。

2、MySQL8自增主鍵

在MySQL8中,按照上述MySQL5.7的操作步驟測試自增主鍵問題。

首先創(chuàng)建自增主鍵表、插入數(shù)據(jù)。

然后,刪除數(shù)據(jù)、插入數(shù)據(jù)。

最后,重啟 重啟 重啟 重啟后插入數(shù)據(jù)。

一定要徹底關(guān)閉MySQL服務,然后重新啟動。

重啟后插入數(shù)據(jù),測試自增主鍵ID的值?

總結(jié)

到此這篇關(guān)于MySQL8自增主鍵變化的文章就介紹到這了,更多相關(guān)MySQL8自增主鍵變化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Grafana+Prometheus監(jiān)控mysql服務性能

    使用Grafana+Prometheus監(jiān)控mysql服務性能

    這篇文章主要介紹了使用Grafana+Prometheus監(jiān)控mysql服務性能的相關(guān)知識,本文給大家介紹的非常詳細,對大家的工作或?qū)W習具有一定的參考借鑒價值,需要的朋友可以參考下方法
    2020-03-03
  • MySQL中的游標和綁定變量

    MySQL中的游標和綁定變量

    這篇文章主要介紹了MySQL中的游標和綁定變量方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • centos編譯安裝mysql 5.6及安裝多個mysql實例詳解

    centos編譯安裝mysql 5.6及安裝多個mysql實例詳解

    這篇文章主要介紹了centos編譯安裝mysql 5.6及安裝多個mysql實例詳解,需要的朋友可以參考下
    2017-02-02
  • MySQL實現(xiàn)字符串截取的圖文教程

    MySQL實現(xiàn)字符串截取的圖文教程

    在實際的項目開發(fā)中有時會有對數(shù)據(jù)庫某字段截取部分的需求,這種場景有時直接通過數(shù)據(jù)庫操作來實現(xiàn)比通過代碼實現(xiàn)要更方便快捷些,這篇文章主要給大家介紹了關(guān)于MySQL實現(xiàn)字符串截取的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 常見的十種SQL語句性能優(yōu)化策略詳解

    常見的十種SQL語句性能優(yōu)化策略詳解

    這篇文章主要介紹了常見的十種SQL語句性能優(yōu)化策略詳解,SQL語句性能優(yōu)化是提高數(shù)據(jù)庫查詢效率的關(guān)鍵步驟,可以減少查詢時間,提高系統(tǒng)響應速度,本文將介紹一些常見的SQL語句性能優(yōu)化技巧,包括索引的使用、合理的查詢條件、避免全表掃描等,需要的朋友可以參考下
    2023-10-10
  • 在同一Linux下安裝兩個版本的MySQL的流程步驟

    在同一Linux下安裝兩個版本的MySQL的流程步驟

    打工人奉旨制作數(shù)據(jù)庫服務的虛擬機模板,模板中包含各種數(shù)據(jù)庫,其中mysql需要具備5.7及8.0兩個版本,并保證服務能正常同時使用,所以本文給小編介紹了在同一Linux下安裝兩個版本的MySQL的流程步驟,需要的朋友可以參考下
    2024-03-03
  • MySQL借助DB實現(xiàn)分布式鎖思路詳解

    MySQL借助DB實現(xiàn)分布式鎖思路詳解

    這篇文章主要給大家介紹了關(guān)于MySQL借助DB實現(xiàn)分布式鎖思路的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MySQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-10-10
  • MySQL數(shù)據(jù)庫本地事務原理解析

    MySQL數(shù)據(jù)庫本地事務原理解析

    事務是數(shù)據(jù)庫系統(tǒng)中的重要概念,了解這一律念是以正確的方式開發(fā)和數(shù)據(jù)庫交互的應用程序的前提,今天通過本文給大家介紹MySQL數(shù)據(jù)庫本地事務原理解析,感興趣的朋友一起看看吧
    2022-01-01
  • MySQL動態(tài)列轉(zhuǎn)行的實現(xiàn)示例

    MySQL動態(tài)列轉(zhuǎn)行的實現(xiàn)示例

    本文介紹了如何在MySQL中實現(xiàn)動態(tài)列轉(zhuǎn)行的功能,通過使用格式化日期、計數(shù)函數(shù)、分組、存儲過程、分組合并函數(shù)和SQL拼接等技巧,可以將動態(tài)列轉(zhuǎn)換為行,從而更好地進行數(shù)據(jù)分析和展示,感興趣的可以了解一下
    2024-11-11
  • 詳解mysql查詢緩存簡單使用

    詳解mysql查詢緩存簡單使用

    這篇文章主要介紹了詳解mysql查詢緩存簡單使用的相關(guān)資料,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-03-03

最新評論

格尔木市| 兴隆县| 临汾市| 喜德县| 临洮县| 松溪县| 泗水县| 扎囊县| 临潭县| 临潭县| 通山县| 武夷山市| 阳山县| 凤阳县| 广安市| 城固县| 临汾市| 茌平县| 马龙县| 安吉县| 临沧市| 阿城市| 龙州县| 阳江市| 合水县| 瓦房店市| 利川市| 尼玛县| 友谊县| 辉县市| 吉水县| 宿松县| 巴马| 内黄县| 兴和县| 永清县| 扎鲁特旗| 奎屯市| 根河市| 大姚县| 米易县|