Как сбросить AUTO_INCREMENT в MySQL? - PullRequest
1117 голосов
/ 19 января 2012

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

Ответы [ 23 ]

11 голосов
/ 15 мая 2015

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

ВНИМАНИЕ !! TRUNCATE TABLE your_table будет удалить все в вашем your_table !!

5 голосов
/ 05 апреля 2017

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

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`);
3 голосов
/ 26 июня 2018

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

> Сначала: отбросить столбец

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

Это работает хорошо!*

1 голос
/ 22 июня 2019

Попробуйте выполнить этот запрос

 ALTER TABLE tablename AUTO_INCREMENT = value;

Или попробуйте этот запрос для сброса автоматического увеличения

 ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;

И установите автоматическое увеличение, а затем выполните этот запрос

  ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
1 голос
/ 13 ноября 2018

Начиная с MySQL 5.6, приведенный ниже подход работает быстрее благодаря онлайн DDL (примечание algorithm=inplace):

alter table tablename auto_increment=1, algorithm=inplace;

1 голос
/ 06 июля 2015

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

1 голос
/ 11 октября 2017

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

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

    ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;

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

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

1 голос
/ 20 июля 2017

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

TRUNCATE TABLE TABLE_NAME
0 голосов
/ 13 сентября 2018

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

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

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

Несколько замечаний:

  1. рассматриваемая таблица InnoDB
  2. таблица использует поле id с типом int в качестве первичного ключа
  3. единственный способ сделать это исключительно в MySQL - это использовать хранимую процедуру
  4. мои изображения ниже используют SequelPro в качестве графического интерфейса. Вы должны иметь возможность адаптировать его на основе предпочитаемого вами редактора MySQL
  5. Я проверял это на MySQL Ver 14.14 Distrib 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

0 голосов
/ 05 июля 2013

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

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

Auto_increment должен сброситься до единицы после ввода новой строки в таблице.

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

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

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