先说说这次的起因,开发写的SQL,三次连续写入数据,每次6条数据,写了3次,中间的pk竟然有跳过的现象。很是纳闷。QQ空间里面一些人讨论了一会,今天找到了原因,写下来仅供参考。

参考http://dinglin.iteye.com/blog/1279536 

http://dev.mysql.com/doc/refman/5.6/en/innodb-auto-increment-configurable.html


具体的数据我就不写了,上面的blog说的很明白了。

贴一个代码吧


inline ulonglong

compute_next_insert_id(ulonglong nr,struct system_variables *variables)

{

  const ulonglong save_nr= nr;


  if (variables->auto_increment_increment == 1)

    nr= nr + 1; // optimization of the formula below

  else

  {

    nr= (((nr+ variables->auto_increment_increment -

           variables->auto_increment_offset)) /

         (ulonglong) variables->auto_increment_increment);

    nr= (nr* (ulonglong) variables->auto_increment_increment +

         variables->auto_increment_offset);

  }


  if (unlikely(nr <= save_nr))

    return ULONGLONG_MAX;


  return nr;

}


算是学习了这个自增原理的,还一个自增锁。