Как сбросить AUTO_INCREMENT в MySQL?

845

Как я могу reset auto_increment поля? Я хочу, чтобы он снова начал отсчет с 1.

  • 7
    Вы можете получить лучший ответ на сайте для администраторов баз данных на dba.stackexchange.com
  • 68
    Вы, вероятно, захотите очистить таблицу тоже: TRUNCATE TABLE yourTableName;
Показать ещё 7 комментариев
Теги:
auto-increment

20 ответов

1375
Лучший ответ

Вы можете reset счетчик:

ALTER TABLE tablename AUTO_INCREMENT = 1

Для InnoDB вы не можете установить значение auto_increment ниже или равно самому высокому текущему индексу. (цитата из ViralPatel):

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

См. Как reset MySQL AutoIncrement с использованием значения MAX из другой таблицы? о том, как динамически получать приемлемое значение.

  • 8
    Это может занять вечность за заполненным столом. Будьте осторожны с этим: stackoverflow.com/questions/2681869/…
  • 52
    это circular reference
Показать ещё 12 комментариев
88
ALTER TABLE tablename AUTO_INCREMENT = 1
  • 4
    Могу ли я узнать, в чем разница между вашим ответом и предыдущим ответом
  • 23
    @PraveenSrinivasan без разницы, мы добавили их одновременно
Показать ещё 3 комментария
45

Просто так:

ALTER TABLE tablename AUTO_INCREMENT = value;

ссылка: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

  • 4
    reset означает установить его значение по умолчанию ... так что вы можете заменить «значение» на 1
36
SET  @num := 0;

UPDATE your_table SET id = @num := (@num+1);

ALTER TABLE your_table AUTO_INCREMENT =1;

Я думаю, что это сделает это

  • 2
    На этот вопрос уже есть соответствующий ответ. Далее, ваш UPDATE обновит все значения в столбце id .
  • 0
    Тест на работу 100% lh4.googleusercontent.com/-8v6M_WSkdqs/U2Zs7nVkiwI/AAAAAAAACmI/…
Показать ещё 4 комментария
36

Изображение 807 Существует очень простой способ с phpmyadmin под вкладкой "Операции", вы можете установить в параметрах таблицы автоинкремент на нужный номер.

  • 0
    Вам нужно перезапустить службу / сервер mysql сразу после этого.
  • 1
    Я не думаю, что вам нужно перезагрузить сервер после этого. PhpAdmin просто запустит команду для изменения начальной точки приращения.
Показать ещё 1 комментарий
25

Лучшее решение, которое сработало для меня:

ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED;
COMMIT;
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED AUTO_INCREMENT;
COMMIT;

Быстро, работает с innoDB, и мне не нужно знать текущее максимальное значение! Таким образом, счетчик автоматического увеличения будет reset, и он автоматически запустится с максимального значения.

  • 1
    он установит значение NULL auto-inc для information_schema; проверьте SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
  • 1
    Я протестировал на версии 5.6.x, и это сработало отлично, и запрос Керема Гюнеша вернул максимальное значение плюс один, а НЕ ноль, как указано. (может быть, он установлен в null после первого запроса, но не после второго запроса) Я считаю, что это лучшее решение для InnoDB.
Показать ещё 2 комментария
21

Есть хорошие варианты, приведенные в Как Reset Столбец автоинкремента MySQL

Обратите внимание, что ALTER TABLE tablename AUTO_INCREMENT = value; не работает для InnoDB

  • 8
    Вы как это сделать с InnoDB?
  • 5
    Это работает на InnoDB, по крайней мере на MySQL 5.1.73.
Показать ещё 2 комментария
16

Самые высоко оцененные ответы на этот вопрос рекомендуют "ALTER yourtable AUTO_INCREMENT = значение". Однако это работает только тогда, когда value в alter больше текущего максимального значения столбца автоинкремента. Согласно документации MySQL:

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

В сущности, вы можете только изменить AUTO_INCREMENT, чтобы увеличить значение столбца автоинкремента, а не reset до 1, поскольку OP запрашивает во второй части вопроса. Для опций, которые фактически позволяют вам установить AUTO_INCREMENT вниз от текущего максимума, посмотрите Reorder/reset автоматический прирост первичного ключа.

14

Добавление обновления, поскольку в MySQL 5.6 изменилась функциональность. Начиная с MySQL 5.6 вы можете использовать простой ALTER TABLE с InnoDB:

ALTER TABLE tablename AUTO_INCREMENT = 1;

Документы обновляются, чтобы отразить это:

http://dev.mysql.com/doc/refman/5.6/en/alter-table.html

Мое тестирование также показывает, что таблица НЕ скопирована, значение просто изменилось.

10
ALTER TABLE news_feed DROP id

ALTER TABLE news_feed ADD  id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)

Я использовал это в некоторых своих сценариях, поле id было сброшено, а затем добавлено с предыдущими настройками, все существующие поля в таблице базы данных заполнены новыми значениями автоматического увеличения, это также должно работать с InnoDB.

Обратите внимание, что все поля в таблице будут пересчитаны и будут иметь другие идентификаторы!!!.

  • 2
    Я хотел бы иметь что-то вроде этого! Но как дополнительное предупреждение; это, очевидно, полностью сломает ваши внешние ключи.
8

Вы также можете использовать таблицу синтаксиса TRUNCATE следующим образом: TRUNCATE TABLE table_name

BEWARE!! TRUNCATE TABLE your_table будет удалять все в your_table!!

  • 11
    Новые программисты , знайте, что TRUNCATE также удалит ВСЕ ваши строки в указанной таблице!
  • 1
    Приведенный выше комментарий должен быть вставлен в ответ или, по крайней мере, объяснение фактического использования усечения.
Показать ещё 2 комментария
2

Вы можете просто обрезать таблицу до reset последовательности

TRUNCATE TABLE TABLE_NAME
  • 1
    лучше покажи по коду, как урезать таблицу.
2

это для пустой таблицы:

ALTER TABLE `table_name` AUTO_INCREMENT = 1;

Если у вас есть данные, но вы хотите его убрать, я рекомендую использовать это:

ALTER TABLE `table_name` DROP `auto_colmn`;
ALTER TABLE `table_name` ADD  `auto_colmn` INT( {many you want} ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`auto_colmn`);
  • 0
    просто использовать это
1

Счетчик автоматического приращения для таблицы может быть (повторно) установлен двумя способами:

  • Выполняя запрос, как и другие, уже объясненные:

    ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;

  • Использование инструмента Workbench или другого средства визуального проектирования баз данных. Я покажу в Workbench, как это делается - но это не должно сильно отличаться в другом инструменте. Щелкните правой кнопкой мыши нужную таблицу и выберите Alter table в контекстном меню. Внизу вы можете увидеть все доступные параметры для изменения таблицы. Выберите Options, и вы получите эту форму: Изображение 808

    Затем просто установите желаемое значение в поле Auto increment, как показано на изображении. Это будет в основном выполнять запрос, показанный в первом варианте.

0

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

  • 0
    не могли бы вы объяснить, как вы это сделали?
  • 0
    @MZaragoza Просто отбросьте старый столбец без ИИ, а затем создайте новый, в котором включен ИИ.
Показать ещё 1 комментарий
-1

Пожалуйста, используйте ниже код:

ALTER TABLE tablename AUTO_INCREMENT = 1
-1

Лучший способ - удалить поле с AI и добавить его снова с помощью AI, работает для всех таблиц

-2

Чтобы обновить последний плюс один id

 ALTER TABLE table_name AUTO_INCREMENT = 
 (SELECT (id+1) id FROM table_name order by id desc limit 1);
-2

Я предлагаю вам перейти в Query Browser и сделать следующее:

  • Перейдите к схемам и найдите таблицу, которую вы хотите изменить.
  • Щелкните правой кнопкой мыши и выберите команду создания копии.
  • Откройте вкладку результатов и вставьте оператор create.
  • Перейдите к последней строке инструкции create и найдите Auto_Increment = N, (Где N - текущее число для поля auto_increment.)
  • Замените N на 1.
  • Нажмите ctrl + enter.

Auto_increment должен reset к одному, как только вы введете новую строку в таблицу.

Я не знаю, что произойдет, если вы попытаетесь добавить строку, в которой значение поля auto_increment уже существует.

Надеюсь на эту помощь!

-6

Ниже код работает для меня

Alter TABLE employee AUTO_INCREMENT = 5;

версия - 5.7.13

Двигатель - innodb

Ещё вопросы

Сообщество Overcoder
Наверх
Меню