关于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是可能引起重复主键错误

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

最新文章

  1. 最大公约数和最小公倍数--java实现
  2. 十二、shapes
  3. 看svn用户组管理功能的产品设计
  4. DTcms列表隔行换色;loop自带行号
  5. Spark Streaming揭秘 Day21 动态Batch size实现初探(下)
  6. BringWindowToTop(), SetForegroundWindow(), SetActiveWindow()
  7. 异步套接字基础:select函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
  8. LoadRunner如何在注册业务脚本中设置参数化唯一性
  9. 位图像素的颜色 携程编程大赛hdu
  10. status状态栏实现字符串走动
  11. Chapter 2 Open Book——34
  12. FZU 1893 内存管理 模拟
  13. 小哈学Python第二课:Hello Word
  14. BM算法
  15. SPI协议详解
  16. js原生的节点操作API
  17. Guiceberry+Webdriver+TestNG
  18. POJ 2696
  19. 关于App自动化执行链接Appium服务包名正确但是报错An unknown server-side error occurred while processing the command
  20. electron 的跳转

热门文章

  1. 解决document.getElementById("")在IE7中误读成name的bug
  2. Java xml和map,list格式的转换-摘抄
  3. Elasticsearch7.1中文文档-第一章-入门
  4. 011_linuxC++之_继承的引入
  5. BZOJ 2815: [ZJOI2012]灾难 拓扑排序+倍增LCA
  6. Gym 100548F Color 给花染色 容斥+组合数学+逆元 铜牌题
  7. wnmp安装配置的坑
  8. HDU–5988-Coding Contest(最小费用最大流变形)
  9. Java图片裁剪
  10. js最简洁的时间对象转成时间字符串的方法