我在表中指定的位置(id=5处,id自动增长,主键)插入新行,需要将指定位置之后(id>=5)的id修改之后,在执行插入操作,这个过程完成之后,我在插入一行记录(不是指定位置,末尾添加),这是mysql报错1062 Duplicate entry '28' for key 'PRIMARY',我知道之前的ID已经修改了,但是为什么后面插入的行ID怎么会冲突呢(应该也会自增的呀),实在想不明白,请高手支招

解决方案 »

  1.   

    比如说:以下表test有a,b两个字段,其中a字段是auto_increment,primary keya b
    1 我
    2 非
    3 常
    4 爱
    5 你如果现在我有一条数据 要插入
    a b
    2 真的想插在第一行的下边,而原来的第二行的编号也依次向下移动变成3,4,5,6就是以下效果a b
    1 我
    2 真的
    3 非
    4 常
    5 爱
    6 你
    上面这个过程是这样实现的:
    update test set a=a+1 where a>=2;
    insert into test values (2,'真的');
    ok ,没有问题,插入成功,
    但是我现在要这样插入数据:insert into test(b)value("你知道吗?")
    想要的效果是:
    a b
    1 我
    2 真的
    3 非
    4 常
    5 爱
    6 你
    7 你知道吗?//这行数据不能插入
    这时出问题了,报错:
    SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '6' for key 'PRIMARY',就这样的问题,实在不知道怎么办了
      

  2.   

    我是楼主
    修改a的过程是逆序的:
    update test set a=a+1 where a>=2 order by a desc;
    insert into test values (2,'真的');
      

  3.   

    你怎么修改的是  alter table tbname auto_increment=xxx这样修改的吗
      

  4.   

    你怎么修改的是  alter table tbname auto_increment=xxx这样修改的吗
      

  5.   

    使用的存储引擎是InnodB 我把存储引擎换成myisam之后,上面所有的操作都没有问题了
      

  6.   

    这个没办法,你的update test set a=a+1 where a>=2 order by a desc;操作中MYSQL显然没有去更新AUTO——INCREMENT的计数器。 可以算是个BUG。 你可以报告一下这个BUG》