关于mysql的自增测试,innodb和myisam下的不同表现
Posted 百鬼之主
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于mysql的自增测试,innodb和myisam下的不同表现相关的知识,希望对你有一定的参考价值。
(修改的还是同一行,命令输错了,多写了一步)
但是这个时候继续插入,就不会报错,因为刚才即使报错了,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_testG ********* 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_testG
********* 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是可能引起重复主键错误
-
在主从使用不同引擎的时候,也会出现问题,最好将引擎改完一致性的
以上是关于关于mysql的自增测试,innodb和myisam下的不同表现的主要内容,如果未能解决你的问题,请参考以下文章