關於mysql的自增測試,innodb和myisam下的不同表現


關於mysql的自增測試,innodb和myisam下的不同表現

innodb引擎下的自增id測試

1 innodb引擎下,如果顯示insert了最大值,那么下次的AUTO_INCREMENT值就是這個最大值+1

 

2 如果這時候再把其中一個id值update成10,那么下次的AUTO_INCREMENT卻還是不變

 

(修改的還是同一行,命令輸錯了,多寫了一步)

3 如果這時再利用自增段去插入,到了10的時候是會報錯的

但是這個時候繼續插入,就不會報錯,因為剛才即使報錯了,AUTO_INCREMENT

的值依舊會增加

4 如果db重啟了,那么innodb表在啟動后,AUTO_INCREMENT值會自動檢測出當前表中的最大值+1

 

先重啟mysql

AUTO_INCREMENT的值為111

測試4.1:手工修改AUTO_INCREMENT值為110,重啟db,發現AUTO_INCREMENT還是原來的沒有修改前的AUTO_INCREMENT,因為我只修改了但並沒有插入數據,順便提一句,AUTO_INCREMENT值只能設置得比當前值大,不能比當前值小,如果設置得比當前值小,它會默認調整到當前的最大值。

測試4.2 插入一條111的記錄,重啟db,這時AUTO_INCREMENT應該不變,符合猜測

測試4.3,刪除該表的所有記錄,不重啟db的話AUTO_INCREMENT不變,如果重啟db則AUTO_INCREMENT會置空,重新計數,符合猜測

myisam引擎下自增id

1 myisam引擎下,如果顯示insert了最大值,那么下次的AUTO_INCREMENT值就是這個最大值+1

mysql> insert into myisam_test values(); Query OK, 1 row affected (0.00 sec)

mysql> insert into myisam_test values(); Query OK, 1 row affected (0.00 sec)

mysql> insert into myisam_test(id) values(5); Query OK, 1 row affected (0.00 sec)

mysql> show create table myisam_test\G ********* 1. row ********* Table: myisam_test Create Table: CREATE TABLE myisam_test ( id int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (id) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 1 row in set (0.00 sec)

2 如果這時候再把其中一個id值update成105,那么下次的AUTO_INCREMENT就會變成106(這和innodb是不同的!)

mysql> update myisam_test set id=105 where id=1; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from myisam_test;

+-----+

| id |

+-----+

| 2 |

| 5 |

| 105 |

+-----+

3 rows in set (0.00 sec)

mysql> show create table myisam_test\G

********* 1. row *********

Table: myisam_test Create Table:

CREATE TABLE myisam_test (

id int(11) NOT NULL AUTO_INCREMENT,

PRIMARY KEY (id)

) ENGINE=MyISAM AUTO_INCREMENT=106 DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

3 當db重啟后,myisam引擎的AUTO_INCREMENT值不變

測試3.1 手工修改AUTO_INCREMENT值為110,重啟db,發現AUTO_INCREMENT還是110,符合猜測

 

測試3.2 刪除該表下的所有記錄,重啟db,AUTO_INCREMENT值不變

 

 

總結:

  • 現在使用的一般都是innodb引擎,如果將myisam引擎轉換過來的時候,一定要小心這個引擎在自增id上的不同表現

  • 自增id的列不要顯示指定自增id值,myisam還好,innodb是可能引起重復主鍵錯誤

  • 在主從使用不同引擎的時候,也會出現問題,最好將引擎改完一致性的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM