本帖最后由 xiaotao5 于 2014-05-03 19:19:46 编辑

解决方案 »

  1.   

    第一种方法:
    加一字段status代表是否删除,status=1为正常 status=0为已删除。
    当删除时,只需要把status设为0,
    当下次需要插入时,先search status=0的记录(select id from table where status=0 order by id desc limit 1),如果有,则把这个id作为新记录id,然后把新记录覆盖旧记录。否则按id最大值新增记录。第二种方法:
    可以用另一个表记录已经删除的id。
    例如表A用于正常使用,表B用于记录已经删除的id1.表B为空时,插入记录到A表,id按最大值+1
    2.当要删除记录,从A中删除id,然后在B表中插入这个删除的id
    3.当再要插入记录时,先判断B中是否有删除的id,如果有,新增的记录就使用这个之前被删除的id,然后B表中把这个id删除,因为已经被使用了。否则,执行1。
    4.当过了一段时间10万个id已经被使用了,需要删除旧记录,删除时,把旧记录的id写入B表。然后重复3步骤即可。
      

  2.   

    可以将已经删除的ID记入一个表中,新增记录时先查询下这个表,是否有已经删除ID,是的话就使用一个并从这个表中删除该ID
      

  3.   

    select * from A where (select count(*) from A t where t.id<=id) < id;
      

  4.   

    --
    -- 表的结构 `t`
    --CREATE TABLE IF NOT EXISTS `t` (
      `id` int(11) DEFAULT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;--
    -- 转存表中的数据 `t`
    --INSERT INTO `t` (`id`) VALUES
    (1),
    (3),
    (5);select id, (select count(*) from t where id<=p.id) from t pid (select count(*) from t where id<=p.id) 
    1  1 
    3  2 
    5  3 非要自己和自己过不去
      

  5.   

    如果业务允许,把auto_increment字段删除 在增加auto_increment字段  序号就重排。