Как восстановить непрерывную последовательность первичного ключа в MySQL?

220
10 января 2018, 15:56

Первичным ключом в таблице является целое число с опцией auto_increment. Я удалил запись в таблице с id(первичным ключом) 4. Id следующей записи осталось 5, следующей 6 и т.д. Как перезаписать id каждой записи?

Answer 1

Этого делать НЕЛЬЗЯ.

Назначение первичного ключа - однозначная идентификация записи таблицы. Причём на протяжении всего срока жизни таблицы. Именно таблицы, а не записи - т.е. даже если запись из неё удалена, значение ПК этой записи больше никогда не должно использоваться.

Хотите непрерывную нумерацию? заведите для этого отдельное поле и издевайтесь над ним как угодно, например:

-- создание поля
ALTER TABLE `table` ADD COLUMN numbering BIGINT NOT NULL;
-- инициализация начального значения (на 1 меньше)
SET @num := 0;
-- нумерация поля с требуемым порядком сортировки
UPDATE `table` SET numbering = (@num := @num + 1) ORDER BY id ASC;

Понятно, вторую и третью операции можно выполнять в любой момент, когда потребуется перенумерация, в т.ч. меняя требуемую сортировку (направление и/или поле).

А первичный ключ не трогайте.

READ ALSO
Как писать юнит-тесты для скриптов которые работают с базами данных?

Как писать юнит-тесты для скриптов которые работают с базами данных?

Добрый день, подскажите пожалуйста какие существуют подходы если нужно протестировать части веб-приложения которые работают с базой данных...

275
Сортировка в нужном порядке

Сортировка в нужном порядке

Требуется создать свой порядок сортировки вида: 1,2,3,null,null,null,nullПробовал создать дополнительное поле, и пронумеровать нужное

229
GetKeyboardState: определение состояния клавиши

GetKeyboardState: определение состояния клавиши

Не могу понять как работает функция GetKeyboardStateВроде как должна определять состояние всех клавиш, но правильность результата зависит от места...

247