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

淺談MySQL8和MySQL5.7在自增計(jì)數(shù)上的區(qū)別

 更新時(shí)間:2023年10月08日 10:03:53   作者:愛(ài)可生開(kāi)源社區(qū)  
MySQL數(shù)據(jù)庫(kù)是一款非常流行的開(kāi)源數(shù)據(jù)庫(kù),其版本升級(jí)迅速,在使用過(guò)程中也發(fā)現(xiàn)了不同版本之間存在著一些區(qū)別,本文主要介紹了MySQL8和MySQL5.7在自增計(jì)數(shù)上的區(qū)別,感興趣的可以了解一下

Auto-Increment

自增(Auto-Increment)計(jì)數(shù)功能可以為主鍵列生成唯一值,這是數(shù)據(jù)庫(kù)的一種設(shè)計(jì)。與 MySQL 5.7 相比,MySQL 8 為自增功能做了一項(xiàng)重要的升級(jí)。這個(gè)升級(jí)可以確保自增計(jì)數(shù)器的最大值在服務(wù)器重啟后保持不變,從而為數(shù)據(jù)一致性和可靠性提供了更好的保障。在本文中,我們將對(duì)比 MySQL 5.7 和 MySQL 8 的不同之處,并提供實(shí)際示例來(lái)展示兩者的區(qū)別。

MySQL 5.7 的自增

在 MySQL 5.7 中,自動(dòng)增計(jì)數(shù)器的工作機(jī)制如下:當(dāng)向包含自增列的表中插入新的一行數(shù)據(jù)時(shí),計(jì)數(shù)器會(huì)自動(dòng)加 1,生成的數(shù)值會(huì)作為插入行的主鍵使用。這個(gè)計(jì)數(shù)器值僅保存在內(nèi)存中,在服務(wù)器重啟后無(wú)法持久化。因此,如果服務(wù)器崩潰或重啟,計(jì)數(shù)器可能會(huì)重置為一個(gè)較低的值。

MySQL 8 的自增持久化

隨著 MySQL 8 的發(fā)布,自增計(jì)數(shù)器機(jī)制有了顯著改進(jìn)。在 MySQL 8 中,自增計(jì)數(shù)器的最大值現(xiàn)在可以在服務(wù)器重啟后持久化。這意味著,即使服務(wù)器重啟,自增計(jì)數(shù)器也會(huì)從上次結(jié)束的地方恢復(fù),以確保自增主鍵的值保持連續(xù)。

示例對(duì)比

讓我們用一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明 MySQL 5.7 和 MySQL 8 在持久自增計(jì)數(shù)器方面的區(qū)別。我們將創(chuàng)建一個(gè)名為 users 的表,用于存儲(chǔ)用戶信息。

在 MySQL 5.7 中建表。

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.42-46 |
+-----------+
mysql> CREATE TABLE users (
? ? id INT AUTO_INCREMENT PRIMARY KEY,
? ? username VARCHAR(50) NOT NULL
);
Query OK, 0 rows affected (0.02 sec)

在表中插入三條數(shù)據(jù),可以查看到。

mysql> INSERT INTO users (username) VALUES ('user1');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO users (username) VALUES ('user2');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO users (username) VALUES ('user3');
Query OK, 1 row affected (0.01 sec)
mysql> select * from users;
+----+----------+
| id | username |
+----+----------+
| ?1 | user1 ? ?|
| ?2 | user2 ? ?|
| ?3 | user3 ? ?|
+----+----------+
3 rows in set (0.00 sec)

我們繼續(xù)刪除一條記錄并插入一條新記錄。

mysql> delete from users where id=3;
Query OK, 1 row affected (0.01 sec)
mysql> select * from users;
+----+----------+
| id | username |
+----+----------+
| ?1 | user1 ? ?|
| ?2 | user2 ? ?|
+----+----------+
2 rows in set (0.00 sec)
mysql> INSERT INTO users (username) VALUES ('user4');
Query OK, 1 row affected (0.01 sec)

刪除 ID 為 3 的記錄和插入新記錄后,與預(yù)期一致,我們觀察到新記錄的 ID 為 4。

mysql> select * from users;
+----+----------+
| id | username |
+----+----------+
|  1 | user1    |
|  2 | user2    |
|  4 | user4    |
+----+----------+
3 rows in set (0.00 sec)

現(xiàn)在,我們從 users 表中刪除最后一條記錄(ID=4),重啟服務(wù)器,并檢查表內(nèi)容。

mysql> delete from users where id=4;
Query OK, 1 row affected (0.01 sec)
mysql> select * from users;
+----+----------+
| id | username |
+----+----------+
| ?1 | user1 ? ?|
| ?2 | user2 ? ?|
+----+----------+
2 rows in set (0.00 sec)
service mysql restart
mysql> select * from users;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: ? ?2
Current database: db1
+----+----------+
| id | username |
+----+----------+
| ?1 | user1 ? ?|
| ?2 | user2 ? ?|
+----+----------+
2 rows in set (0.01 sec)

表中只剩下兩條記錄。我們插入第五條記錄,判斷它是否采用 ID 5,還是回退為ID 3。

mysql> INSERT INTO users (username) VALUES ('user5');
Query OK, 1 row affected (0.00 sec)
mysql> select * from users;
+----+----------+
| id | username |
+----+----------+
| ?1 | user1 ? ?|
| ?2 | user2 ? ?|
| ?3 | user5 ? ?|
+----+----------+
3 rows in set (0.00 sec)

因此,在 MySQL 5.7 中,重啟會(huì)導(dǎo)致自動(dòng)增長(zhǎng)計(jì)數(shù)器重置為較低的值,從而使新的記錄插入時(shí)采用 ID 3。

MySQL 8 的解決方案

MySQL 8 解決了在服務(wù)器重啟時(shí) InnoDB 存儲(chǔ)引擎出現(xiàn)的自增計(jì)數(shù)器丟失的問(wèn)題。這項(xiàng)增強(qiáng)可以確保自增計(jì)數(shù)器的值在服務(wù)器重啟后持久化,從而保證主鍵生成的一致性。
在 MySQL 8 中建表。

mysql> select version();
+-------------------------+
| version() ? ? ? ? ? ? ? |
+-------------------------+
| 8.0.33-0ubuntu0.22.04.2 |
+-------------------------+
1 row in set (0.00 sec)
mysql> CREATE TABLE users (
? ? -> ? ? id INT AUTO_INCREMENT PRIMARY KEY,
? ? -> ? ? username VARCHAR(50) NOT NULL
? ? -> );
Query OK, 0 rows affected (0.04 sec)

在表中插入三條數(shù)據(jù),可以查看到。

mysql> INSERT INTO users (username) VALUES ('user1');
Query OK, 1 row affected (0.07 sec)
mysql> INSERT INTO users (username) VALUES ('user2');
Query OK, 1 row affected (0.02 sec)
mysql> INSERT INTO users (username) VALUES ('user3');
Query OK, 1 row affected (0.01 sec)
mysql> select * from users;
+----+----------+
| id | username |
+----+----------+
| ?1 | user1 ? ?|
| ?2 | user2 ? ?|
| ?3 | user3 ? ?|
+----+----------+
3 rows in set (0.00 sec)

接下來(lái),刪除一條并插入一條。

mysql> delete from users where id=3;
Query OK, 1 row affected (0.01 sec)
mysql> select * from users;
+----+----------+
| id | username |
+----+----------+
| ?1 | user1 ? ?|
| ?2 | user2 ? ?|
+----+----------+
2 rows in set (0.00 sec)
mysql> INSERT INTO users (username) VALUES ('user4');
Query OK, 1 row affected (0.01 sec)

刪除 ID 為 3 的記錄和插入新記錄采用 ID 為 4。

mysql>  select * from users;
+----+----------+
| id | username |
+----+----------+
|  1 | user1    |
|  2 | user2    |
|  4 | user4    |
+----+----------+
3 rows in set (0.00 sec)

刪除最后一條記錄(ID=4)后,重啟服務(wù)器并查看表。

mysql> delete from users where id=4;
Query OK, 1 row affected (0.01 sec)
mysql> ?select * from users;
+----+----------+
| id | username |
+----+----------+
| ?1 | user1 ? ?|
| ?2 | user2 ? ?|
+----+----------+
2 rows in set (0.00 sec)
service mysql restart
mysql> select * from users;
ERROR 2013 (HY000): Lost connection to MySQL server during query
No connection. Trying to reconnect...
Connection id: ? ?8
Current database: db1
+----+----------+
| id | username |
+----+----------+
| ?1 | user1 ? ?|
| ?2 | user2 ? ?|
+----+----------+
2 rows in set (0.02 sec)

重啟后,users 表中只保留兩條記錄。在 MySQL 8 中,插入新記錄時(shí),如預(yù)期那樣采用 ID=5。

mysql> INSERT INTO users (username) VALUES ('user5');
Query OK, 1 row affected (0.01 sec)
mysql> ?select * from users;
+----+----------+
| id | username |
+----+----------+
| ?1 | user1 ? ?|
| ?2 | user2 ? ?|
| ?5 | user5 ? ?|
+----+----------+
3 rows in set (0.00 sec)

總結(jié)

MySQL 8 之前版本中的 InnoDB 存儲(chǔ)引擎報(bào)告的自增計(jì)數(shù)器問(wèn)題可能會(huì)導(dǎo)致困惑和數(shù)據(jù)不一致,特別是在服務(wù)器重啟期間。計(jì)數(shù)器的值可能丟失,導(dǎo)致自動(dòng)生成的主鍵值不匹配。MySQL 8 通過(guò)保證自增計(jì)數(shù)器在服務(wù)器重啟之間持久化來(lái)解決這個(gè)問(wèn)題。

通過(guò)升級(jí)到 MySQL 8,開(kāi)發(fā)者可以利用這個(gè)功能創(chuàng)建更加堅(jiān)實(shí)的應(yīng)用程序,可以管理不同的故障情況而不影響數(shù)據(jù)完整性。

https://www.percona.com/blog/auto-increment-counter-persistence-in-mysql-8-comparing-the-evolution-from-mysql-5-7/

到此這篇關(guān)于淺談MySQL8和MySQL5.7在自增計(jì)數(shù)上的區(qū)別的文章就介紹到這了,更多相關(guān)MySQL8和MySQL5.7自增計(jì)數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql中show指令使用方法詳細(xì)介紹

    mysql中show指令使用方法詳細(xì)介紹

    mysql中show指令使用過(guò)程中會(huì)經(jīng)常遇到,在本文將為大家詳細(xì)介紹下其具體的使用,需要的朋友不要錯(cuò)過(guò)
    2014-11-11
  • MySQL優(yōu)化GROUP BY方案

    MySQL優(yōu)化GROUP BY方案

    滿足GROUP BY子句的最一般的方法是掃描整個(gè)表并創(chuàng)建一個(gè)新的臨時(shí)表,表中每個(gè)組的所有行應(yīng)為連續(xù)的,然后使用該臨時(shí)表來(lái)找到組并應(yīng)用累積函數(shù)(如果有)。在某些情況中,MySQL能夠做得更好,即通過(guò)索引訪問(wèn)而不用創(chuàng)建臨時(shí)表。
    2014-07-07
  • MySQL數(shù)據(jù)同步出現(xiàn)Slave_IO_Running:?No問(wèn)題的解決

    MySQL數(shù)據(jù)同步出現(xiàn)Slave_IO_Running:?No問(wèn)題的解決

    本人最近工作中遇到了Slave_IO_Running:NO報(bào)錯(cuò)的情況,通過(guò)查找相關(guān)資料終于解決了,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)同步出現(xiàn)Slave_IO_Running:?No問(wèn)題的解決方法,需要的朋友可以參考下
    2023-05-05
  • Windows10下mysql 8.0.19 安裝配置方法圖文教程

    Windows10下mysql 8.0.19 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了Windows10下mysql 8.0.19 安裝配置方法圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • MySQL: mysql is not running but lock exists 的解決方法

    MySQL: mysql is not running but lock exists 的解決方法

    下面可以參考下面的方法步驟解決。最后查到一個(gè)網(wǎng)友說(shuō)可能和log文件有關(guān),于是將log文件給移除了,再重啟MySQL終于OK了
    2009-06-06
  • MySQL 服務(wù)和數(shù)據(jù)庫(kù)管理

    MySQL 服務(wù)和數(shù)據(jù)庫(kù)管理

    今天MySQL總結(jié)一些方法和一些基礎(chǔ)的內(nèi)容,下面文章將圍繞MySQL 服務(wù)與數(shù)據(jù)庫(kù)管理得相關(guān)資料展開(kāi)內(nèi)容,需要的朋友可以參考一下,希望對(duì)你有所幫助
    2021-11-11
  • MySQL查詢時(shí)指定使用索引的實(shí)現(xiàn)

    MySQL查詢時(shí)指定使用索引的實(shí)現(xiàn)

    在MySQL中,可以通過(guò)指定查詢使用的索引來(lái)提高查詢性能和優(yōu)化查詢執(zhí)行計(jì)劃,本文就來(lái)介紹一下MySQL查詢時(shí)指定使用索引的實(shí)現(xiàn),感興趣的可以了解一下
    2023-11-11
  • 如何查詢MySQL中某個(gè)表的索引信息

    如何查詢MySQL中某個(gè)表的索引信息

    MySQL是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),索引是數(shù)據(jù)庫(kù)中非常重要的組成部分,可以幫助提高查詢效率,這篇文章主要給大家介紹了關(guān)于如何查詢MySQL中某個(gè)表的索引信息,需要的朋友可以參考下
    2024-08-08
  • Mysql配置主從復(fù)制-GTID模式詳解

    Mysql配置主從復(fù)制-GTID模式詳解

    這篇文章主要介紹了Mysql配置主從復(fù)制-GTID模式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 修改MySQL數(shù)據(jù)庫(kù)中表和表中字段的編碼方式的方法

    修改MySQL數(shù)據(jù)庫(kù)中表和表中字段的編碼方式的方法

    這篇文章主要介紹了如何修改MySQL數(shù)據(jù)庫(kù)中表和表中字段的編碼方式,需要的朋友可以參考下
    2014-05-05

最新評(píng)論

林州市| 祁连县| 蕲春县| 阿鲁科尔沁旗| 象山县| 社旗县| 枣强县| 叙永县| 长治县| 黑山县| 贡觉县| 金坛市| 蕲春县| 桂阳县| 靖远县| 长垣县| 林州市| 镇巴县| 磴口县| 永吉县| 海城市| 萝北县| 潍坊市| 泾川县| 华安县| 海阳市| 宜州市| 库车县| 巴中市| 丽水市| 即墨市| 五莲县| 淅川县| 广灵县| 南江县| 静安区| 曲周县| 汕尾市| 两当县| 德保县| 托里县|