Повторно синхронизировать поле автоинкремента MySQL - PullRequest
0 голосов
/ 17 сентября 2011

У меня есть таблица, в которой есть столбец автоинкремента, и вчера вечером я допустил ошибку и случайно вставил несколько плохих строк, поэтому я удалил их.

К сожалению, это означает, что я «пропускаю» несколько идентификаторов в поле автоинкремента (я вставил две хорошие строки и три плохие строки, идентификаторы 315 и 316 были хорошими, но я удалил строки с идентификаторами 317, 318 и 319. При возобновлении подсчета он сделал идентификатор 320, поэтому он пропустил три строки, которые я удалил).
Я знаю, что это желаемая функциональность поля ИИ, но есть ли способ, которым я могу сбросить его, чтобы эти идентификаторы не были пропущены? Я читал об удалении поля id и воссоздании его (и я понимаю, что это разрушит любые отношения с другими таблицами, я могу исправить это вручную).

Есть ли гарантия, что новые идентификаторы, присвоенные строкам, будут такими же, как и раньше. Например, будут ли строки 1, 2, 3, 4, ... по-прежнему быть строками 1, 2, 3, 4, ... после того, как я это сделаю?
Есть ли другой способ сделать это?

Ответы [ 3 ]

1 голос
/ 17 сентября 2011

Согласно документации , вы должны иметь возможность использовать:

ALTER TABLE your_table AUTO_INCREMENT = <your desired value>;

Но это будет работать, только если у вас нет идентификаторов выше этого значения,В вашем случае, поскольку вы заявляете, что у вас уже есть идентификаторы, сгенерированные на 320 (и, возможно, выше), вам придется удалить их и заново вставить их позже.

0 голосов
/ 17 сентября 2011

На самом деле не должно иметь значения, что в вашем поле автоинкремента есть пробелы, если никакая другая таблица не использует эти значения в качестве внешнего ключа.В любом случае, такое поле никогда не должно отображаться пользователю.

0 голосов
/ 17 сентября 2011

В вашей ситуации следующий запрос выполнит работу:

ALTER TABLE `table` AUTO_INCREMENT = 1

После этого следующего значения auto_increment будет наибольшее из доступных (не 2).Если у вас было 10, 11, 12, 13 идентификаторов, а затем удалены 11, 12 и 13, то после указанного выше запроса ваше следующее значение auto_increment снова будет равно 11.

...