老问题了.不好意思,我没找到答案.比如表1
ID        字段
1           aaa
2           bbb删除ID=2的记录后再添加数据ccc会跳过ID=2ID        字段
1           aaa
3           ccc有没有办法在不影响数据的情况下,让id重新从1开始排序?谢谢!ID        字段
1           aaa
2          ccc

解决方案 »

  1.   

    把auto_increment属性去掉,增加记录时将上一个ID加一(先取出上一个id)。
    好像麻烦了点
      

  2.   

    这样做有很大的弊端
    你这是删除id=2,后面已经没有数据了,所以不用考虑id=3....n的情况。
    如果id字段的数据很多呢,删除id=2 那么id=3...n的 是不是都要依次减一,这样数据库的开销会很大。如果你一定要这么做,得变通一下。
    要增加一个表deltable,用来记录被删除的ID号。 往主表插入数据时候首先从deltable表中取出一个id,然后根据这个id往主表插数据,成功后删除deltable表中的这个id。如果deltable表为空,则插入主表的表尾。
    这样做存在的弊端是 当有大量并发写主表就会出问题。 当然可以给写主表任务建立队列,并且锁表,能解决并发问题。我能想到的就这么多。
      

  3.   

    通过下面的语句可以重新设置最大atuo_increment值.但如果还有比它大的值的话,还是会按表中的最大值来递增.ALTER TABLE `lycompanynews` AUTO_INCREMENT = 1比如表里面有id这个字段,属性为auto_increment.
    本来已经递增到100了.现在我们把记录全部都删掉.如果直接舔记录的话,id会是101.
    但是如果这是我们先执行ALTER TABLE `lycompanynews` AUTO_INCREMENT = 0那么,新舔一条记录id则会变成1.
      

  4.   

    执行以下 SQL 指令即可
    create temporary table tmp select 字段 from `表1`;
    TRUNCATE TABLE `表1`; 
    insert into `表1` select 字段 from tmp;注意:字段 为该表除去自增字段以外的全部字段的集合
      

  5.   

    TRUNCATE TABLE `表1`; 是清除表中所有的数据,有点不符合楼主要想实现你想要的效果只能在插入数据之前找出最后一条数据的id然后你让sql语句中的id+1执行就行了
      

  6.   

    如果你有1000条记录的时候,删掉了第1条, 那么然后新的一条你是要插入为id=1 ?? 
    还是把前面的999条依次前移, 然后插入 id=1000 ???这样做的原因?id是否有实际用处? 比如显示? 比如作为票据号码? .... 等?
      

  7.   


    你好我问一个问题:
    我在设计留言板的时候,如果有20条记录,我删除了其中的第5条,那么,ID字段就少了5.这样的话,我写程序查询数据库的时候,需要把留言都显示出来,问题出来了,我还想用ID字段作为显示出来的留言的序列号呢,这样的话岂不是少了第5条?如果在删除的时候可以把数据库里的ID字段再重新排序一下就解决了,那应该怎么排序呢?
    另外,如果有别的办法的话,请告诉我该怎么设计这个留言板的显示程序呢?说说大体思路就行.
      

  8.   

    ID做为一个索引就不要去弄了。你要显示编号 在程序控制一下不就完了 一个变量 递增 或者数据库自己做一个编号 为什么非要弄这个ID呢