#mysql #auto-increment
#mysql #автоматическое увеличение
Вопрос:
Это работало до сих пор, но когда я перезапускаю службу, база данных теряет значение автоматического увеличения для моей таблицы. Это наверняка то, что я делаю со своими запросами, потому что я не изменял свои таблицы в последнее время. Что бы это могло быть?
Комментарии:
1. получите список всех хранимых процедур и триггеров, которые у вас есть в вашей базе данных. Проверьте это на предмет чего-то подозрительного. Попробуйте переустановить сервер, посмотрите, поможет ли это
2. никаких триггеров, никаких процедур, это происходит только при перезапуске службы, все работает отлично, если я урезаю таблицу и начинаю заново.
3. Под перезапуском службы вы подразумеваете, что вы перезапускаете mysql-сервер?
Ответ №1:
Это документированное поведение, это не ошибка.
При запуске сервера он просматривает каждую таблицу (InnoDB), определяя, каким должно быть новое значение auto_increment. Из http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html :
InnoDB использует счетчик автоматического увеличения в памяти, пока сервер работает. Когда сервер остановлен и перезапущен, InnoDB повторно инициализирует счетчик для каждой таблицы для первой ВСТАВКИ в таблицу, как описано ранее.
При развертывании DDL происходит нечто подобное, что вызывает перестройку таблицы, такую как изменение engine
— даже изменение ее на то же значение, что и раньше.
Комментарии:
1. Это не объясняет, почему оно будет равно нулю.
Ответ №2:
ALTER TABLE имя_таблицы ENGINE=MyISAM
Работает для меня. InnoDB хранит AI в памяти, поэтому при перезапуске сервера mysql он сбрасывается до текущего количества строк 1. Итак, если ваша таблица пуста при перезапуске сервера, она будет сброшена на 1.
MyISAM, с другой стороны, был хорошо собран.