我的机器是linux,mysql数据库是社区版5.5.9,CREATE TABLE `tt` (
  `f1` INT(11) NOT NULL AUTO_INCREMENT,
  `f2` VARCHAR(20) DEFAULT NULL,
  `f3` VARCHAR(20) DEFAULT NULL,
  PRIMARY KEY (`f1`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8遇到过这样的问题,f1是自增长字段
在执行批量插入数据的语句中,类似
INSERT INTO tt(f2,f3) VALUES ('a1','b1'),('a2','b2'),('a3','b3'),('a4','b4');
曾经发现f1自增长的没有按照自增长的顺序增加。
比如上面这个插入语句,f1应该是1,2,3,4,结果有时候会1,2,3,6这种情况,
不知道大家有无遇到这类情况啊。

解决方案 »

  1.   

    在插入时是否有提示、warning之类的,在正常情况下没有出现过此问题
      

  2.   

    当时没有注意是否有warning,这是上个月做的测试,当时印象很深刻,从昨天开始又做了几次这种测试,又没有发生过,这让我对mysql的自增长id心存很大的问题。
      

  3.   

    你之前碰到问题时候,执行的应该不是
    INSERT INTO tt(f2,f3) VALUES ('a1','b1'),('a2','b2'),('a3','b3'),('a4','b4');
    而是其他语句吧
      

  4.   

    你说的对,当时不是执行这个语句,但我想具体当时是怎么写的没什么关系吧,都是这种类型的语句。
    无非是字段列多几个,插入的字段内容不是'a1',可能是'abc'.
    应该没问题吧。
      

  5.   

    是否有并发进程,比如其它用户也连接着进行插入。这个应该放心,至少到目前为止还从未在MYSQL的官方BUG报告中看到有人提交这个BUG。
      

  6.   

    这就是所谓的identity gap,SQL Server和ASE都曾碰到此类问题。
    不影响使用就好。
      

  7.   

    我主要是担心mysql复制的时候,采用mixed模式的时候,两边的自增长字段不一致
      

  8.   

    应该不会,涉及到自增的字段(还有涉及其他函数的情况),mixed下都是用row方式的吧。http://dev.mysql.com/doc/refman/5.1/en/binary-log-mixed.html
      

  9.   

    在自增长字段添加的时候,mixed采用的不是row模式,和陈述模式是一样,只是记录了当前插入的自增长id,
    还会记录每次自增长的长度,然后从机自己计算自增长id是多少。
      

  10.   

    auto_increment_increment这些参数都会记录在二进制文件中传递给从机。