вы можете выбрать такие идентификаторы:
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;
вы также можете просто распечатать первый неиспользуемый id следующим образом:
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
клиентов, оцененных по затраченной сумме.