Как reset AUTO_INCREMENT в MySQL?
Как я могу сбросить AUTO_INCREMENT
поля? Я хочу, чтобы он снова начал считать с 1
.
Ответы
Ответ 1
Вы можете reset счетчик:
ALTER TABLE tablename AUTO_INCREMENT = 1
Для InnoDB вы не можете установить значение auto_increment
ниже или равно самому высокому текущему индексу. (цитата из ViralPatel):
Обратите внимание, что вы не можете reset счетчика на значение, меньшее или равное для тех, которые уже были использованы. Для MyISAM, если значение меньше чем или равно максимальному значению, которое в настоящее время находится в AUTO_INCREMENT столбец, значение reset до текущего максимума плюс один. Для InnoDB, если значение меньше текущего максимального значения в столбец, ошибка не возникает, и текущее значение последовательности не изменяется.
См. Как reset MySQL AutoIncrement с использованием значения MAX из другой таблицы? о том, как динамически получать приемлемое значение.
Ответ 2
ALTER TABLE tablename AUTO_INCREMENT = 1
Ответ 3
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Я думаю, что это сделает это
Ответ 4
Просто так:
ALTER TABLE tablename AUTO_INCREMENT = value;
ссылка: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
Ответ 5
Существует очень простой способ с phpmyadmin под вкладкой "Операции", вы можете установить в параметрах таблицы автоинкремент на нужный номер.
Ответ 6
Лучшее решение, которое сработало для меня:
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, и он автоматически запустится с максимального значения.
Ответ 7
Есть хорошие варианты, приведенные в Как Reset Столбец автоинкремента MySQL
Обратите внимание, что ALTER TABLE tablename AUTO_INCREMENT = value;
не работает для InnoDB
Ответ 8
Ответы на этот вопрос с наивысшей оценкой рекомендуют "ALTER yourtable AUTO_INCREMENT = value". Однако это работает только тогда, когда value
в alter больше текущего максимального значения столбца автоинкремента. Согласно документации MySQL 8:
Вы не можете сбросить счетчик до значения, которое меньше или равно значению, которое используется в данный момент. И для InnoDB, и для MyISAM, если значение меньше или равно максимальному значению, которое в настоящее время находится в столбце AUTO_INCREMENT, значение сбрасывается до текущего максимального значения столбца AUTO_INCREMENT плюс один.
По сути, вы можете только изменить AUTO_INCREMENT, чтобы увеличить значение столбца автоинкремента, но не сбросить его до 1, как задает ОП во второй части вопроса. Для опций, которые фактически позволяют вам установить AUTO_INCREMENT вниз от его текущего максимума, взгляните на Переупорядочить/сбросить первичный ключ автоинкремента.
Ответ 9
Добавление обновления, поскольку в 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.
Обратите внимание, что все поля в таблице будут пересчитаны и будут иметь другие идентификаторы!!!.
Ответ 11
Вы также можете использовать таблицу синтаксиса TRUNCATE
следующим образом:
TRUNCATE TABLE table_name
BEWARE!! TRUNCATE TABLE your_table
будет удалять все в your_table
!!
Ответ 12
это для пустой таблицы:
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`);
Ответ 13
Вот мое решение, но я не буду советовать делать это, если ваш столбец имеет ограничения или связан как внешний ключ с другими таблицами, так как это может иметь плохие последствия или даже не будет работать.
> Во-первых: бросьте колонку
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
Это хорошо работает!
Ответ 14
Я попытался изменить таблицу и установить auto_increment в 1, но это не сработало. Я решил удалить имя столбца, которое я увеличивал, затем создаю новый столбец с вашим предпочтительным именем и установим, чтобы новый столбец увеличивался с самого начала.
Ответ 15
Вы можете просто обрезать таблицу до reset последовательности
TRUNCATE TABLE TABLE_NAME
Ответ 16
Счетчик автоматического приращения для таблицы может быть (пере) установлен двумя способами:
-
Выполнив запрос, как уже объяснили другие:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
-
Использование Workbench или другого визуального инструмента проектирования баз данных. Я покажу в Workbench, как это делается, но в другом инструменте он не должен сильно отличаться. Правой кнопкой мыши щелкните нужную таблицу и выберите " Alter table
в контекстном меню. Внизу вы можете увидеть все доступные варианты изменения таблицы. Выберите " Options
и вы получите эту форму:
Затем просто установите желаемое значение в поле Auto increment
как показано на рисунке. Это в основном выполнит запрос, показанный в первом варианте.
Ответ 17
Начиная с MySQL 5.6, подход, описанный ниже, работает быстрее благодаря оперативному DDL (обратите внимание, algorithm=inplace
):
alter table tablename auto_increment=1, algorithm=inplace;
Ответ 18
Чтобы обновить последний плюс один id
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);
Ответ 19
ALTER TABLE имя таблицы AUTO_INCREMENT = 1
Ответ 20
Я гуглил и нашел этот вопрос, но ответ, который я действительно ищу, удовлетворяет двум критериям:
- используя чисто запросы MySQL
- сбросить существующее табличное автоинкремент до max (id) + 1
Поскольку я не мог найти именно то, что я хочу здесь, я выложил ответ из различных ответов и поделился им здесь.
Несколько вещей, чтобы отметить:
- рассматриваемая таблица InnoDB
- таблица использует
id
поля с типом int
как первичный ключ - единственный способ сделать это исключительно в MySQL - это использовать хранимую процедуру
- мои изображения ниже используют SequelPro в качестве графического интерфейса. Вы должны иметь возможность адаптировать его на основе предпочитаемого вами редактора MySQL
- Я проверил это на 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 ;
Тогда запустите это.
Перед запуском это выглядит так, когда вы смотрите в разделе "Хранимые процедуры" в своей базе данных.
Когда я запускаю, я просто выбираю хранимую процедуру и нажимаю Run Selection.
Примечание: разделители имеют решающее значение. Следовательно, если вы копируете и вставляете сверху выбранные ответы в этом вопросе, по этой причине они, как правило, не работают.
После запуска я должен увидеть хранимую процедуру
Если вам нужно изменить хранимую процедуру, вам нужно удалить хранимую процедуру, а затем выбрать ее снова запустить.
Шаг 2: вызов хранимой процедуры
На этот раз вы можете просто использовать обычные запросы MySQL.
call reset_autoincrement('products');
Первоначально из моих собственных заметок SQL-запросов в https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc и адаптирован для StackOverflow
Ответ 21
Попробуйте запустить этот запрос
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;
Ответ 22
Пожалуйста, используйте ниже код:
ALTER TABLE tablename AUTO_INCREMENT = 1
Ответ 23
Я предлагаю вам перейти в Query Browser и сделать следующее:
- Перейдите к схемам и найдите таблицу, которую вы хотите изменить.
- Щелкните правой кнопкой мыши и выберите команду создания копии.
- Откройте вкладку результатов и вставьте оператор create.
- Перейдите к последней строке инструкции create и найдите Auto_Increment = N,
(Где N - текущее число для поля auto_increment.)
- Замените N на 1.
- Нажмите ctrl + enter.
Auto_increment должен reset к одному, как только вы введете новую строку в таблицу.
Я не знаю, что произойдет, если вы попытаетесь добавить строку, в которой значение поля auto_increment уже существует.
Надеюсь на эту помощь!
Ответ 24
Лучший способ - удалить поле с AI и добавить его снова с помощью AI, работает для всех таблиц
Ответ 25
Ниже код работает для меня
Alter TABLE employee AUTO_INCREMENT = 5;
версия - 5.7.13
Двигатель - innodb