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

1447
homerun 19 Янв 2012 в 12:37

24 ответа

Лучший ответ

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

ALTER TABLE tablename AUTO_INCREMENT = 1

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

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

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

2249
Community 23 Май 2017 в 11:47

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

  1. Перейдите к схемам и найдите таблицу, которую хотите изменить.

  2. Щелкните правой кнопкой мыши и выберите скопировать оператор создания.

  3. Откройте вкладку результатов и вставьте оператор создания их.

  4. Перейдите к последней строке оператора create и найдите Auto_Increment = N, (Где N - текущий номер для поля auto_increment.)

  5. Замените N на 1.

  6. Нажмите ctrl+enter .

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

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

-3
Dharman 16 Окт 2020 в 16:07

Вам нужно следовать совету из комментария Майлза М., и вот небольшой код, который исправляет диапазон в mysql. Также вам нужно открыть my.ini (Mysql) и изменить max_execution_time = 60 на max_execution_time = 6000; для больших баз данных. Не используйте "ALTER TABLE tablename AUTO_INCREMENT = 1", он удалит все в вашей базе данных.

$con=mysqli_connect($dbhost, $dbuser, $dbpass, $database);
$res=mysqli_query($con, "select * FROM data WHERE id LIKE id ORDER BY id ASC");
$count = 0;  
while ($row = mysqli_fetch_array($res)){
         $count++;
        
    mysqli_query($con, "UPDATE data SET id='".$count."' WHERE id='".$row['id']."'");
    
         }
         echo 'Done reseting id';
         mysqli_close($con);
-2
Peter Gruppelaar 3 Окт 2020 в 10:23

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

-2
Grumpy 3 Июн 2017 в 13:17

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

 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;
0
Shabeer Sha 22 Июн 2019 в 16:16

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

  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-query / # mysql-reset-autoinc и адаптирован для StackOverflow.

0
Kim Stacks 13 Сен 2018 в 04:44

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

0
santosh mahule 21 Май 2018 в 10:30

Чтобы обновить последний плюс один идентификатор

 ALTER TABLE table_name AUTO_INCREMENT = 
 (SELECT (id+1) id FROM table_name order by id desc limit 1);
0
narasimharaosp 11 Авг 2017 в 12:31

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

TRUNCATE TABLE TABLE_NAME
1
Kunwar Babu 20 Июл 2017 в 10:46

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

1
andromeda 6 Июл 2015 в 10:08
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
2
Mihai Galan 1 Авг 2019 в 18:30

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

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

    ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;

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

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

2
Kristijan Iliev 6 Дек 2017 в 11:52

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

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

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

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

5
bdalina 26 Июн 2018 в 13:51

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

alter table tablename auto_increment=1, algorithm=inplace;

7
artsafin 13 Ноя 2018 в 19:26

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

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`);
8
Abdul Aziz Al Basyir 5 Апр 2017 в 06:51
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.

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

12
2 revs 1 Май 2014 в 05:45

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

ОСТОРОЖНО !! TRUNCATE TABLE your_table удалит все в вашем your_table !!

13
samayo 13 Июн 2016 в 11:27

Есть хорошие варианты, указанные в Как сбросить столбец автоинкремента MySQL

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

19
vahid abdi 24 Фев 2014 в 12:36

Добавление обновления, поскольку функциональность изменилась в 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

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

21
SeanN 25 Сен 2015 в 19:28

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

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

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

30
lreeder 5 Апр 2019 в 14:06

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

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

38
salouri 16 Сен 2014 в 22:39

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

47
Miles M. 3 Май 2014 в 20:20

Просто так:

ALTER TABLE tablename AUTO_INCREMENT = value;

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

66
fyr 19 Янв 2012 в 08:40
SET  @num := 0;

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

ALTER TABLE your_table AUTO_INCREMENT =1;

Я думаю, это сработает

106
nghiepit 4 Май 2014 в 16:21