MySQL5.7之auto_increment回溯
# 建立關於表t,其中a欄位為主鍵自增
mysql> create table t(a bigint primary key auto_increment, b tinyint);
Query OK, 0 rows affected (0.03 sec)
# 插入一些資料
mysql> insert into t select null, 10;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into t select null, 20;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into t select null, 30;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into t select null, 40;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
# 檢視錶記錄
mysql> select * from t;
+---+------+
| a | b |
+---+------+
| 1 | 10 |
| 2 | 20 |
| 3 | 30 |
| 4 | 40 |
+---+------+
4 rows in set (0.00 sec)
# 刪除最後一條資料
mysql> delete from t where a=4;
Query OK, 1 row affected (0.02 sec)
# 檢視錶建立語句,發現AUTO_INCREMENT=5
mysql> show create table t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`a` bigint(20) NOT NULL AUTO_INCREMENT,
`b` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`a`)
) ENGINE=InnoDB
AUTO_INCREMENT=5
DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
# 進行主鍵回溯模擬
# 重啟資料庫
[root@mysql ~]# service mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
# 重新檢視錶建立語句,發現AUTO_INCREMENT=4
mysql> show create table t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`a` bigint(20) NOT NULL AUTO_INCREMENT,
`b` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`a`)
) ENGINE=InnoDB
AUTO_INCREMENT=4
DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
# 繼續插入語句
mysql> insert into t select null, 50;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
# 檢視錶的資料,發現上述自增ID=4又重新出現
mysql> select * from t;
+---+------+
| a | b |
+---+------+
| 1 | 10 |
| 2 | 20 |
| 3 | 30 |
|
4
| 50 |
+---+------+
4 rows in set (0.00 sec)
這是因為在MySQL5.7中的表的AUTO_INCREMENT是基於記憶體,不會持久化在磁碟中,每次啟動資料庫時,會對每張表進行max(auto_increment) + 1重新作為該表下一次的主鍵ID的自增值。在MySQL8.0中就不會出現該問題,因為資料會在磁碟中持久化。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29812844/viewspace-2658344/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 常用演算法之回溯法演算法
- 八皇后之回溯法解決
- MySQL AUTO_INCREMENTMySqlREM
- [演算法之回溯演算法]演算法
- 經典演算法之回溯法演算法
- MySQL的AUTO_INCREMENTMySqlREM
- 回溯演算法之復原IP地址演算法
- AUTO_INCREMENT ON the MyISAM STORAGE ENGINEREM
- Using AUTO_INCREMENT CASEREM
- 回溯法
- **Mysql5.7新特性之—– 淺談Sys庫**MySql
- mysql的auto_increment詳解MySqlREM
- AUTO_INCREMENT的實現方式REM
- 五大常用演算法之四:回溯法演算法
- 回溯問題
- 【Mysql】Mysql5.7新特性之-json儲存MySqlJSON
- 【Mysql】mysql5.7新特性之-sys schema的作用MySql
- 「演算法之美系列」遞迴與回溯(JS版)演算法遞迴JS
- C++搜尋與回溯演算法之LETTERS(字母)C++演算法
- mysql中auto_increment是什麼MySqlREM
- SQL基礎 AUTO_INCREMENT 欄位SQLREM
- 回溯演算法演算法
- 回溯part02
- MySQL5.7新特性之備份工具mysqlpump的使用MySql
- #MySQL# mysql5.7新特性之半同步複製MySql
- 【Mysql】mysql公開課之-mysql5.7複製特性MySql
- 五大常用演算法之四:回溯演算法演算法
- 表型別對AUTO_INCREMENT的影響型別REM
- ALTER TABLE causes auto_increment resulting key 'PRIMARY'REM
- MySQL重置 Auto_increment欄位起始值MySqlREM
- C++搜尋與回溯演算法之Lake Counting(數湖)C++演算法
- 重啟mysql對於auto_increment的影響MySqlREM
- replace into 導致MASTER/SLAVE的auto_increment值不同ASTREM
- InnoDBd的auto_increment以及innodb_autoinc_lock_modeREM
- UnityGhost的檢測和回溯Unity
- MySQL5.7 多例項MySql
- 編寫高質量的js之正確理解正規表示式回溯JS
- Day25 第七章 回溯演算法part04 回溯終章演算法