вы можете выбрать идентификаторы так:
set @rank = 0;
select id, @rank:=@rank+1 from tbl order by id
Результатом является список идентификаторов и их позиции в последовательности.
Вы также можете сбросить идентификаторы так:
set @rank = 0;
update tbl a join (select id, @rank:=@rank+1 as rank from tbl order by id) b
on a.id = b.id set a.id = b.rank;
Вы также можете просто распечатать первый неиспользуемый идентификатор, например:
select min(id) as next_id from ((select a.id from (select 1 as id) a
left join tbl b on a.id = b.id where b.id is null) union
(select min(a.id) + 1 as id from tbl a left join tbl b on a.id+1 = b.id
where b.id is null)) c;
после каждой вставки вы можете сбросить auto_increment:
alter table tbl auto_increment = 16
или явно установить значение id при вставке:
insert into tbl values (16, 'something');
обычно в этом нет необходимости, у вас есть count(*)
и возможность создать рейтинг в ваших наборах результатов. типичный рейтинг может быть:
set @rank = 0;
select a.name, a.amount, b.rank from cust a,
(select amount, @rank:=@rank+1 as rank from cust order by amount desc) b
where a.amount = b.amount
клиентов, ранжированных по потраченной сумме.