关于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是可能引起重复主键错误
在主从使用不同引擎的时候,也会出现问题,最好将引擎改完一致性的
关于mysql的自增测试,innodb和myisam下的不同表现的更多相关文章
- MySQL两大存储引擎InnoDB与MyISAM
1.InnoDB存储引擎 MySQL5.5中InnoDB成为默认的存储引擎.InnoDB是事务型存储引擎,被设计用来处理大量的短期事务.它的性能和自动崩溃恢复特性,使得它在非事务场景中也很流行. 所以 ...
- InnoDB和MyISAM存储引擎的区别
在MySQL数据库的使用过程中我们经常会听到存储引擎这个名词.MySQL的存储引擎有好多种如InnoDB.MyISAM.Memory.NDB等等,多存储引擎也是MySQL数据库的特色. InnoDB和 ...
- MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)
测试缘由 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿 ...
- INNODB自增主键的一些问题 vs mysql获得自增字段下一个值
今天发现 批量插入下,自增主键不连续了....... InnoDB AUTO_INCREMENT Lock Modes This section describes the behavior of A ...
- [MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
首先,介绍下关于InnoDB引擎存储格式的几个要点:1.InnoDB可以选择使用共享表空间或者是独立表空间方式,建议使用独立表空间,便于管理.维护.启用 innodb_file_per_table 选 ...
- 数据库使用--MySQL: InnoDB 还是 MyISAM?
MyISAM存储引擎 MyISAM是 默认存储引擎.它基于更老的ISAM代码,但有很多有用的扩展.MyISAM存储引擎的一些特征: · 所有数据值先存储低字节.这使得数据机和操作系统分离.二 ...
- java jdbc 连接mysql数据库 实现增删改查
好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...
- MySQL数据恢复和复制对InnoDB锁机制的影响
MySQL通过BINLOG记录执行成功的INSERT,UPDATE,DELETE等DML语句.并由此实现数据库的恢复(point-in-time)和复制(其原理与恢复类似,通过复制和执行二进制日志使一 ...
- MYSQL 5.6中禁用INNODB引擎
并不是所有人都需要INNODB引擎,虽然它弥补了MYSQL缺乏事务支持的毛病,但是它的磁盘性能一直是让人比较担忧的.另外比较老的PHP系统,大多是采用MYISAM引擎在MYSQL建表,似乎INNODB ...
随机推荐
- CSS权重;慎用!important
初初接触样式的前端开发者在碰到样式覆盖时,最先选择的往往是!important. 但是这种做法不好,应该优先考虑从样式的级联属性或者位置来解决问题. 切记以下情况永远不要使用!important: 1 ...
- virtualBox中有线和无线两种情况下centos虚拟机和本地机互ping的方案
之前写微信点餐系统的时候,刚开始是无线连接,然后每次进去虚拟机ip和本地ip都会改变,所以每次都需要配置一下nginx,还有本地的路径.之后换有线连接,就研究了一下桥接模式有线情况下虚拟机静态ip设置 ...
- javascript面向对象 用new创建一个基于原型的javascript对象
//创建一个类 其实就是个对象 var Student={ name:"robot", height:1.6, run:function(){ console.log(this.n ...
- sublime中替换成换行
ctrl + h 打开替换窗口. replace with里输入 ctrl + shift + enter
- 新版iTunes connect上传iOS应用
http://www.brianjcoleman.com/tutorial-distribute-apps-using-new-itunes-connect/ Recently Apple updat ...
- 在Linux下使用rm -rf /*后会怎样?
每个工作过的码农,也许不知道分布式,也许不知道高并发,但想必都知道这句鼎鼎大名的代码.本人对此也是比较好奇的,不妨用虚拟机试试看 首先是普通角色: 普通角色把拥有权限的文件全都删掉了后,其他文件的提示 ...
- POJ 2488 -- A Knight's Journey(骑士游历)
POJ 2488 -- A Knight's Journey(骑士游历) 题意: 给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径. 经典的“骑士游历”问题 ...
- python之scrapy爬取某集团招聘信息
1.创建工程 scrapy startproject gosuncn 2.创建项目 cd gosuncn scrapy genspider gaoxinxing gosuncn.zhiye.com 3 ...
- [hibernate]save()与persist()区别
Hibernate 之所以提供与save()功能几乎完全类似的persist()方法,一方面是为了照顾JPA的用法习惯.另一方面,save()和 persist()方法还有一个区别:使用 save() ...
- 计算机组成原理 — GPU 图形处理器
目录 文章目录 目录 显卡 GPU GPU 与深度学习 GPU 与 CPU 体系结构的区别 GPU 显存与 CPU 主存的区别 GPU 与 CPU 之间的数据交互方式 GPU 的体系结构 GPU 的工 ...