自增加的ID,当增长到10时,我把2至10的数据删掉,重启数据库,ID是从2开始,而不是从11开始,为什么呢?这样带来的坏处是:我有一个接口表(ID是自增加的),接口表的数据经过处理后要移到历史表,但是接口表会有一些异常数据停留。假设接口表有ID为1到10的数据需要处理,处理完后,ID为2至10的数据都移到了历史表,但是有一条ID为1的异常数据停留在接口表中,这时候重启数据库,接口表的ID是从2开始,这些新增的数据移到历史表的话,就会有主键重复的错误。Tips:MYSQL的版本是5.6,存储引擎是InnoDB
mysql自增加ID

解决方案 »

  1.   

    新增数据迁移到历史表  用insert ignore into来代替insert into
      

  2.   

    主键,bigint类型,自增长
    你测试一下,你在mysql操作界面上,insert  into 一条记录,不插入ID(先删除掉几条记录),成功后看一下id。
    然后你用自己的应用程序再去insert into一条记录,再来看看ID是多少。看看又没有变化
      

  3.   

    主键,bigint类型,自增长
    你测试一下,你在mysql操作界面上,insert  into 一条记录,不插入ID(先删除掉几条记录),成功后看一下id。
    然后你用自己的应用程序再去insert into一条记录,再来看看ID是多少。看看又没有变化
    直接在数据库客户端写insert语句新增10条数据,ID从1自增到11,,
    删除5条数据,重启数据库后,ID变成6了,
      

  4.   

    你这个问题,跟你的表存储引擎有关。如果是MYISAM的话,重启是不会影响自增字段值的,因为它的自增字段值记录到MYD里面,固化了。INNODB的自增字段值记录在内存里,重启后会到表里统计行数,然后再这个行数上+1.OPTIMIZE操作也会引擎这个现象。
      

  5.   

    这个跟数据库选择的引擎有关系,INNODB的自增字段值记录在内存里,重启后会到表里统计行数,然后再这个行数上+1.这个值也可以手动修改的。