Mysql 5.1.42 изменить таблицу auto_increment = 0 не работает, усечение делает - PullRequest
1 голос
/ 09 января 2010

Для моих автоматических приемочных тестов я хочу, чтобы вставки начинались с id = 1. Я добился этого на одном ПК (XP 32bit, mysql 5.1.something) с помощью (после удаления всех строк из таблицы) "изменить имя таблицы table_name auto_increment = 0".

Я сейчас настраиваю новый ПК (Windows 7 64bit, mysql 5.1.42), и эта команда, похоже, не имеет никакого эффекта. В таблице information_schema.tables я вижу, что значение auto_increment не изменяется обратно на 0 - оно просто продолжает расти. Если я попытаюсь изменить значение в этой таблице напрямую, мне скажут, что доступ запрещен «root» @ «localhost». Возможно, это подсказывает мою проблему?

Другие люди, работающие с stackoverflow, предположили, что "truncate from tableName" - хорошая альтернатива. Я рад сообщить, что это работает. Но кто-нибудь знает, почему команда «изменить таблицу» не сбрасывает auto_increment?

Спасибо!

1 Ответ

5 голосов
/ 09 января 2010

Не знаю, почему он работает на одном сервере и не работает на другом, но в руководстве MySQL указано (цитирование, выделено мое) :

Чтобы изменить значение AUTO_INCREMENT счетчик для использования для новых строк сделайте это:

ALTER TABLE t2 AUTO_INCREMENT = value;

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

Может быть, в этом причина проблемы: вы пытаетесь вернуть счетчик auto_increment обратно на 0, но он уже выше этого значения - и, поскольку вы не можете сбросить его на значение, которое меньше любого значения, которое уже есть был использован, это не работает.

...