Как предотвратить сброс MySQL значения автоинкремента? - PullRequest
7 голосов
/ 11 января 2012

У меня есть таблица для создания временных идентификаторов. Когда я удаляю все строки в моей таблице, значение автоинкремента для этой таблицы сбрасывается в 0 но я не хочу сбрасывать авто приращение. Что я могу сделать?

Ответы [ 2 ]

5 голосов
/ 11 января 2012

Сравнить СТОЛ TRUNCATE :

Любое значение AUTO_INCREMENT сбрасывается до начального значения. Это правда даже для MyISAM и InnoDB, которые обычно не используют последовательность значения.

... с УДАЛИТЬ ИЗ :

Если вы удалите строку, содержащую максимальное значение для Столбец AUTO_INCREMENT, значение не используется повторно для MyISAM или InnoDB Таблица. Если вы удалите все строки в таблице с помощью команды DELETE FROM tbl_name (без предложения WHERE) в режиме автоматической фиксации последовательность начинается заново для всех систем хранения, кроме InnoDB и MyISAM. Есть некоторые исключения из этого поведения для таблиц InnoDB, как обсуждалось в разделе 13.3.5.3, «Обработка AUTO_INCREMENT в InnoDB».

Для таблиц MyISAM вы можете указать дополнительный столбец AUTO_INCREMENT в ключе из нескольких столбцов. В этом случае повторное использование значений удаляется из вершина последовательности встречается даже для таблиц MyISAM. Смотрите раздел 3.6.9, «Использование AUTO_INCREMENT».

2 голосов
/ 10 февраля 2018

Сброс значения автоматического приращения до 0 может быть вызван несколькими причинами.

Причина 1

Вы используете TRANCATE table для очистки таблицы. TRUNCATE не только удаляет строки, но и сбрасывает значение автоинкремента по проекту.

Вместо этого используйте DELETE FROM table.

Причина 2

Движок стола - InnoDB. InnoDB не хранит значение автоинкремента на диске, поэтому забывает его, когда сервер MySQL выключен. Когда MySQL запускается снова, механизм InnoDB восстанавливает значение автоинкремента следующим образом: SELECT (MAX(id) + 1) AS auto_increment FROM table. Это ошибка , которая исправлена ​​ в версии 8.0 MySQL.

Смена таблицы движка: ALTER TABLE table ENGINE = MyISAM. Или обновите сервер MySQL до версии 8.0 после его выпуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...