官方文档如下:http://dev.mysql.com/doc/refman/5.6/en/innodb-auto-increment-handling.html
简单记录下:
- 在InnoDB中使用AUTO_INCREMENT机制必须要对相应的列建立索引,用于解决查询最大值问题
- AUTO_INCREMENT的计数器存放于内存中,而非硬盘
- 当表在服务器启动后第一次插入数据时,MySQL会先执行一次“select max(ai_col) from table for update;”用于初始化AUTO_INCREMENT。ai_col指代AUTO_INCREMENT对应的列,该方案能解决第2点未存盘的弊端
- 默认步长为1,可以通过配置auto_increment_increment参数配置步长
- 如果表空表,则计数器值默认为1。可以通过配置auto_increment_offset参数修改
- 如果所在的列,存在比计数器当前计数更大的值,则计数器会更新为当前最大值+步长(默认1)的值
- 如果AUTO_CREAMENT对应的列,在插入数据时,值为0或者NULL时,InnoDB会使用计数器中的值替代
- AUTO_CREAMENT所在列,不能为负数,同时不能超过Integer的最大值
- 使用AUTO_CREMENT时,会锁表。该锁只持续到计数器分配完成值,而不是持续到整条SQL的事务完成