mysql myisam 测试_关于mysql的自增测试,innodb和myisam下的不同表现

本文详细对比了Innodb和Myisam引擎在处理自增ID时的不同表现,包括插入最大值后的自增规则、更新ID后的自增变化、数据库重启的影响以及手动修改AUTO_INCREMENT值的后果。对于数据库管理员和开发者,理解这些差异至关重要,特别是在主从配置或引擎切换时,避免可能出现的重复主键错误。
摘要由CSDN通过智能技术生成

关于mysql的自增测试,innodb和myisam下的不同表现

innodb引擎下的自增id测试

1 innodb引擎下,如果显示insert了最大值,那么下次的AUTO_INCREMENT值就是这个最大值+1

1574392858623.png

1574392897566.png

2 如果这时候再把其中一个id值update成10,那么下次的AUTO_INCREMENT却还是不变

1574393044910.png

(修改的还是同一行,命令输错了,多写了一步)

1574393152603.png

3 如果这时再利用自增段去插入,到了10的时候是会报错的

1574393992905.png

但是这个时候继续插入,就不会报错,因为刚才即使报错了,AUTO_INCREMENT

的值依旧会增加

1574394132496.png

4 如果db重启了,那么innodb表在启动后,AUTO_INCREMENT值会自动检测出当前表中的最大值+1

1574394772632.png

先重启mysql

1574395723872.png

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_testCreate Table: CREATE TABLE myisam_test(idint(11) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id)) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf81 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_testCreate Table:

CREATE TABLE myisam_test(

idint(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,符合猜测

1574397379507.png

测试3.2 删除该表下的所有记录,重启db,AUTO_INCREMENT值不变

1574397537104.png

总结:

现在使用的一般都是innodb引擎,如果将myisam引擎转换过来的时候,一定要小心这个引擎在自增id上的不同表现

自增id的列不要显示指定自增id值,myisam还好,innodb是可能引起重复主键错误

在主从使用不同引擎的时候,也会出现问题,最好将引擎改完一致性的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值