it-swarm.com.ru

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

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

1104
some Folk

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

ALTER TABLE tablename AUTO_INCREMENT = 1

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

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

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

1814
Niels
ALTER TABLE tablename AUTO_INCREMENT = 1
137
boobiq
SET  @num := 0;

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

ALTER TABLE your_table AUTO_INCREMENT =1;

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

66
nghiepit

Просто так:

ALTER TABLE tablename AUTO_INCREMENT = value;

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

53
fyr

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

38
Miles M.

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

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

31
trust_words

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

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

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

19
lreeder

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

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

19
Naz

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

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

18
SeanN
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
Alin Razvan

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

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

11
Manohar Kumar

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

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`);
4
Abdul Aziz Al Basyir

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

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

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

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

3
bdalina

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

TRUNCATE TABLE TABLE_NAME
1
Kunwar Babu

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

1
andromeda

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

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

    ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;

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

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

1
Kristijan Iliev

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

alter table tablename auto_increment=1, algorithm=inplace;

1
artsafin

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

0
santosh mahule

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

  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
Kim Stacks

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

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