Как сбросить автоматическое приращение в MySQL?

Как я могу сброс на AUTO_INCREMENT поля? Я хочу, чтобы он начал отсчет с 1 еще раз.

21 ответов


Вы можете сбросить счетчик с:

ALTER TABLE tablename AUTO_INCREMENT = 1

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

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

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


ALTER TABLE tablename AUTO_INCREMENT = 1

SET  @num := 0;

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

ALTER TABLE your_table AUTO_INCREMENT =1;

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


просто такой:

ALTER TABLE tablename AUTO_INCREMENT = value;

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


enter image description hereсуществует очень простой способ с phpmyadmin на вкладке" операции", вы можете установить в параметрах таблицы автоинкремент на номер, который вы хотите.


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

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, и мне не нужно знать текущее максимальное значение! Таким образом, счетчик автоматического приращения будет сброшен, и он автоматически запустится с максимального значения.


есть хорошие варианты в Как Сбросить MySQL Autoincrement Столбец

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


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

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

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


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

ALTER TABLE tablename AUTO_INCREMENT = 1;

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

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

мое тестирование также показывает, что таблица не копируется, значение просто меняется.


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 .

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


вы также можете использовать синтаксис TRUNCATE таблица, как это : TRUNCATE TABLE table_name

остерегайтесь!! TRUNCATE TABLE your_table будет удалить все в своем your_table!!


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

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`);

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

> во-первых: отбросьте столбец

ALTER TABLE tbl_name DROP COLUMN column_id

> второй: воссоздайте столбец и установите его как первый, если вы хотите, чтобы он был первым столбцом, который я предполагаю.

ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST

это хорошо работает!


вы можете просто усечь таблицу, чтобы сбросить последовательность

TRUNCATE TABLE TABLE_NAME

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

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

    ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;

  2. используя верстак или другой визуальный инструмент проектирования баз данных. Я собираюсь показать на верстаке, как это делается, но это не должно сильно отличаться и в другом инструменте. Щелкните правой кнопкой мыши по нужной таблице и выберите Alter table в контекстном меню. На дне ты видишь все. доступные варианты изменения таблицы. Выберите Options и вы получите эту форму: enter image description here

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


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


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

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

ALTER TABLE имя таблицы AUTO_INCREMENT = 1


я погуглил и нашел этот вопрос, но ответ, который я действительно ищу, соответствует двум критериям:

  1. используя чисто MySQL запросы
  2. сброс существующего автоматического приращения таблицы до max (id) + 1

так как я не мог найти именно то, что я хочу здесь, я выковал ответ из различных ответов и поделиться им здесь.

несколько вещей, чтобы отметить:

  1. таблица в вопросе InnoDB
  2. таблица использует поле id С типом as int в качестве первичного ключа
  3. единственный способ сделать это чисто в MySQL-использовать хранимую процедуру
  4. мои изображения ниже используют SequelPro в качестве GUI. Вы должны иметь возможность адаптировать его на основе предпочтительного редактора MySQL
  5. Я проверил это на MySQL версия 14.14 дистрибутив 5.5.61, для debian-linux-gnu

Шаг 1: Создайте Хранимую Процедуру

создайте хранимую процедуру, например это:

DELIMITER //
CREATE PROCEDURE reset_autoincrement(IN tablename varchar(200))
BEGIN

      SET @get_next_inc = CONCAT('SELECT @next_inc := max(id) + 1 FROM ',tablename,';');
      PREPARE stmt FROM @get_next_inc; 
      EXECUTE stmt; 
      SELECT @next_inc AS result;
      DEALLOCATE PREPARE stmt; 

      set @alter_statement = concat('ALTER TABLE ', tablename, ' AUTO_INCREMENT = ', @next_inc, ';');
      PREPARE stmt FROM @alter_statement;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;
END //
DELIMITER ;

тогда запустите его.

перед запуском это выглядит так, когда вы просматриваете хранимые процедуры в своей базе данных.

enter image description here

когда я запускаю, я просто выбираю хранимую процедуру и нажимаю Run Selection

enter image description here

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

после запуска я должен увидеть хранимую процедуру

enter image description here

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

Шаг 2: вызовите хранимую процедуру

на этот раз вы можете просто использовать обычные запросы MySQL.

call reset_autoincrement('products');

первоначально из моих собственных заметок SQL-запросов в https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc и адаптирован для StackOverflow


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


Я предлагаю вам перейти в браузер запросов и сделать следующее:

  1. перейдите в schemata и найдите таблицу, которую вы хотите изменить.
  2. щелкните правой кнопкой мыши и выберите команду копировать создать.
  3. откройте вкладку результат и вставьте инструкцию create.
  4. перейдите к последней строке инструкции create и найдите Auto_Increment=N, (Где N-текущее число для поля auto_increment.)
  5. заменить N на 1.
  6. пресс ctrl+enter.

типа AUTO_INCREMENT должен сбросить одну после ввода новой строки инт таблице.

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

надеюсь, что это поможет!