(修改的還是同一行,命令輸錯了,多寫了一步)
但是這個時候繼續插入,就不會報錯,因為剛才即使報錯了,AUTO_INCREMENT
的值依舊會增加
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.1 手工修改AUTO_INCREMENT值為110,重啟db,發現AUTO_INCREMENT還是110,符合猜測
測試3.2 刪除該表下的所有記錄,重啟db,AUTO_INCREMENT值不變
-
現在使用的一般都是innodb引擎,如果將myisam引擎轉換過來的時候,一定要小心這個引擎在自增id上的不同表現
-
自增id的列不要顯示指定自增id值,myisam還好,innodb是可能引起重復主鍵錯誤
-
在主從使用不同引擎的時候,也會出現問題,最好將引擎改完一致性的