Назад | Перейти на главную страницу

Будет ли удаление таблицы восстановления AUTO_INCREMENT в MySQL?

У меня есть таблица со следующей схемой:

CREATE TABLE `tblsomething` (
  `something_id` int(11) NOT NULL AUTO_INCREMENT,
   …
 PRIMARY KEY (`something_id`)
) ENGINE=InnoDB AUTO_INCREMENT=144620955 

Мне нужно сбросить автоинкремент. Вот и подумываю сделать:

ALTER TABLE tblsomething MODIFY something_id int NOT NULL;

Но меня беспокоит эта часть документации MySQL:

В большинстве случаев ALTER TABLE работает, создавая временную копию исходной таблицы. В копии выполняется изменение, затем исходная таблица удаляется, а новая переименовывается. Пока выполняется ALTER TABLE, исходная таблица доступна для чтения другим сеансам. Обновления и записи в таблицу останавливаются до тех пор, пока новая таблица не будет готова, а затем автоматически перенаправляются в новую таблицу без каких-либо неудачных обновлений.

Так действительно ли отказ от автоматического увеличения является одним из таких случаев? Это заблокирует мой стол?

Определенный ALTER TABLE утверждения всегда приведут к ужасной перестройке, как вы описываете.

В случае удаления AUTO_INCREMENT только один способ предотвратить это - это некий неподдерживаемый взлом. Это включает изменение копии таблицы .frm файл. Это работает, потому что информация схемы хранится отдельно от данных и информации индекса, и изменения не приводят к несогласованности между ними.

Вы можете найти обсуждение этого на mysqlperformanceblog.org и в Книга о высокой производительности MySQL. Однако важно подчеркнуть, что он не поддерживается. Я бы рекомендовал вам протестировать оба метода (простой ALTER TABLE и .frm редактирование) на копии данных в первую очередь. Посмотрите, сколько времени занимают оба процесса, и затем проверьте согласованность.


Изменить: извините, я перечитал написанное и ALTER COLUMN не относится к тому, что вы делаете. Я обновил текст выше.

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

Обновить: Вероятно, это было верно давно (с MyISAM), но, похоже, это уже не так.