InnoDB AUTO_INCREMENT字段原理

官方文档如下:http://dev.mysql.com/doc/refman/5.6/en/innodb-auto-increment-handling.html

简单记录下:

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

猜你喜欢

转载自tbstone.iteye.com/blog/1990911