Если поле является вашим первичным ключом ...
... тогда, как указано в другом месте по этому вопросу, вы не должны менять идентификаторы.Идентификаторы уже уникальны, и вам не нужно и не нужно их повторно использовать.
Теперь, когда сказано ...
В противном случае ...
Этовполне возможно, что у вас есть другое поле (то есть, также как и PK) для некоторого определенного приложением порядка.Пока этот порядок не присущ другому полю (например, если он определен пользователем), в этом нет ничего плохого.
Вы можете воссоздать таблицу, используя (временное) поле auto_increment
а затем удалите auto_increment
впоследствии.
У меня будет соблазн на UPDATE
в порядке возрастания и применения возрастающей переменной.
SET @i = 0;
UPDATE `table`
SET `myOrderCol` = @i:=@i+1
ORDER BY `myOrderCol` ASC;
(Запрос не проверен.)
Кажется довольно расточительным делать это каждый раз, когда вы удаляете элементы, но, к сожалению, при таком подходе ручного заказа не так уж много, если вы захотитедля поддержания целостности столбца.
Вы можете уменьшить нагрузку, например, удалив запись с myOrderCol
, равным, скажем, 5
:
SET @i = 5;
UPDATE `table`
SET `myOrderCol` = @i:=@i+1
WHERE `myOrderCol` > 5
ORDER BY `myOrderCol` ASC;
(Запрос не проверен.)
Это "перемешает" все следующие значения на единицу.