第一种方法: 加一字段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步骤即可。
select * from A where (select count(*) from A t where t.id<=id) < id;
-- -- 表的结构 `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 非要自己和自己过不去
加一字段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步骤即可。
-- 表的结构 `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 非要自己和自己过不去