mysql 有一个表id是自增长
现在经常删除一些数据,比如删除id=20-30所有的记录
由于该id是自增长, 所以下一id从31开始。
但是现在程序员要求每次插入都从最大值开始插入 , 这样上面的情况id应该从21开始 
我思考触发器但是有点欠妥??
不知道如何解决这个问题  (将id的自增长去掉?
每次插入前取最大id值后再插入 
但对于某个批量的插入所不是很好的  , 一次批量插入200条的时候,发现还是要用自增长。

解决方案 »

  1.   

    这个问题好像转化为设置了自增长的id的某表
    当id的下一个值(默认) 和 当前的最大值max(id)+1  不匹配
    如何解决这个问题(如果相等我就可以一次行批量插入1前条数据 否则要先插入一条max(id)+1
    之后再插入999条数据)
      

  2.   

    把表LOCK住,然后打到最大值,把alter tabe AUTO_INCREMENT=max+2 改一下。不过没人这么干,和你的程序员好好谈谈,这种需求本身就是不合理的。ID不过是个标志。如果想连续可以另建一个字段。特别是如果已经有 1,2,3....10 的记录。删除 记录 id betwenn 5 and 9 的时候 10 还在,这种情况怎么处理?
      

  3.   

    所以每次都有一个select max(id)“序员好好谈谈”
    也想找他诚恳 征程 就差不痛哭流滴了, 但是这个还是有这个需要 他人不在现谈这个问题
    能够得到id的下一个值(默认)?????
      

  4.   

     这种大数据量,频繁的删除操作,也不适合mysql数据库。
      

  5.   

    比如下面的情况
    a
    2,3,4  ,7,,8,9, 11这样必须执行  select max(id)+1 from a(本来我想用另外1个字段来记录最大值 但是发现select max 就可以啦)
      

  6.   

    经过测试
    放弃使用触发器 (避免楼上谈到的维护问题)改用存储过程 这样更容易维护还开发  (没有什么不良影响)每次删除的时候在存储过程里 update上条记录的判断标志b=1来实现是否是连续的
    update  ba2 a, (select max(a) as aa  from ba2 where a< 3) b set a.b=1 where a.a=b.aa;
    delete from ba2 where a=3;