Как я могу сброситьAUTO_INCREMENT
поле?
Я хочу, чтобы он снова начал считать 1
.
TRUNCATE TABLE yourTableName;
Как я могу сброситьAUTO_INCREMENT
поле?
Я хочу, чтобы он снова начал считать 1
.
TRUNCATE TABLE yourTableName;
Ответы:
Вы можете сбросить счетчик с помощью:
ALTER TABLE tablename AUTO_INCREMENT = 1
Для InnoDB вы не можете установить auto_increment
значение ниже или равно наибольшему текущему индексу. (цитата из ViralPatel ):
Обратите внимание, что вы не можете сбросить счетчик до значения, которое меньше или равно значению, которое уже использовалось. Для MyISAM, если значение меньше или равно максимальному значению, которое в данный момент находится в столбце AUTO_INCREMENT, значение сбрасывается до текущего максимального плюс один. Для InnoDB, если значение меньше текущего максимального значения в столбце, ошибка не возникает и текущее значение последовательности не изменяется.
См. Как сбросить автоинкремент MySQL, используя значение MAX из другой таблицы? о том, как динамически получить приемлемое значение.
circular reference
curcular reference
?
ALTER TABLE tablename AUTO_INCREMENT = 1
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Я думаю, что это сделает
UPDATE
обновите все значения в id
столбце.
Просто так:
ALTER TABLE tablename AUTO_INCREMENT = value;
ссылка: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
reset
означает установить его в значение по умолчанию ... так что вы можете заменить «значение» на 1
Есть очень простой способ с 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, и мне не нужно знать текущее максимальное значение! Таким образом, автоматический счетчик приращений будет сброшен и будет запускаться автоматически с существующего максимального значения.
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
5.6.15
, в то время как ALTER TABLE tablename AUTO_INCREMENT = 1
делает не .
Ответы на этот вопрос с наивысшей оценкой рекомендуют «ALTER yourtable AUTO_INCREMENT = value». Однако это работает только тогда, когда value
значение alter превышает текущее максимальное значение столбца автоинкремента. Согласно документации MySQL 8 :
Вы не можете сбросить счетчик до значения, которое меньше или равно значению, которое используется в данный момент. Как для InnoDB, так и для MyISAM, если значение меньше или равно максимальному значению, которое в настоящее время находится в столбце AUTO_INCREMENT, значение сбрасывается до текущего максимального значения столбца AUTO_INCREMENT плюс один.
По сути, вы можете изменить только AUTO_INCREMENT, чтобы увеличить значение столбца автоинкремента, но не сбросить его до 1, как задает ОП во второй части вопроса. Для параметров, которые фактически позволяют вам установить AUTO_INCREMENT вниз от его текущего максимума, взгляните на Переупорядочить / сбросить первичный ключ с автоматическим приращением .
Добавление обновления, потому что функциональность изменилась в 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
Мое тестирование также показывает, что таблица НЕ копируется, значение просто изменяется.
В разделе « Как сбросить колонку автоинкремента MySQL» приведены хорошие параметры.
Обратите внимание , что ALTER TABLE tablename AUTO_INCREMENT = value;
это не работает для InnoDB
DELETE
(или ROLLBACK
) не будет восстанавливать идентификаторы. Одно исключение: после перезапуска (или сбоя) вычисляется следующий идентификатор MAX(id)+1
, тем самым эффективно восстанавливая удаленные идентификаторы в конце . Исключение за исключением: MySQL 8.0 оставляет эти идентификаторы неиспользованными.
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
BEWARE !! TRUNCATE TABLE your_table
будет удалять все в вашем your_table
!!
TRUNCATE
также удалит ВСЕ ваши строки в указанной таблице!
TRUNCATE
сбросит auto_increment
поля тоже? Мой вариант использования - очистить старые данные в таблице и снова начать идентификаторы с 1 для новых данных (представьте, очистка таблицы для правильного использования после завершения тестирования). Я думал, что мне придется DROP
весь стол и CREATE
снова.
auto_increment
значение, используйте DELETE FROM
вместо TRUNCATE
.
это для пустой таблицы:
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
Это хорошо работает!
Начиная с MySQL 5.6, подход, описанный ниже, работает быстрее благодаря интерактивному DDL (примечание algorithm=inplace
):
alter table tablename auto_increment=1, algorithm=inplace;
Вы можете просто обрезать таблицу, чтобы сбросить последовательность
TRUNCATE TABLE TABLE_NAME
Я попытался изменить таблицу и установить auto_increment в 1, но это не сработало. Я решил удалить имя столбца, который я увеличивал, затем создать новый столбец с вашим предпочтительным именем и установить этот новый столбец с приращением.
Счетчик автоматического приращения для таблицы может быть (пере) установлен двумя способами:
Выполняя запрос, как уже объяснили другие:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
Использование Workbench или другого визуального инструмента проектирования баз данных. Я покажу в Workbench, как это делается, но в другом инструменте он не должен сильно отличаться. Правым кликом по нужной таблице и выбора Alter table
из контекстного меню. Внизу вы можете увидеть все доступные варианты изменения таблицы. Выберите Options
и вы получите эту форму:
Затем просто установите желаемое значение в поле, Auto increment
как показано на рисунке. Это в основном выполнит запрос, показанный в первом варианте.
Чтобы обновить последний плюс один идентификатор
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);
ALTER TABLE имя таблицы AUTO_INCREMENT = 1
Я гуглил и нашел этот вопрос, но ответ, который я действительно ищу, удовлетворяет двум критериям:
Поскольку я не мог найти именно то, что я хочу здесь, я выложил ответ из различных ответов и поделился им здесь.
Несколько вещей, чтобы отметить:
id
с типом в int
качестве первичного ключасоздайте хранимую процедуру следующим образом:
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.
Примечание: разделители имеют решающее значение. Следовательно, если вы копируете и вставляете сверху выбранные ответы в этом вопросе, они, как правило, не работают по этой причине.
После запуска я должен увидеть хранимую процедуру
Если вам нужно изменить хранимую процедуру, вам нужно удалить хранимую процедуру, а затем выбрать ее снова запустить.
На этот раз вы можете просто использовать обычные запросы MySQL.
call reset_autoincrement('products');
Первоначально из моих собственных заметок SQL-запросов в https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc и адаптирован для StackOverflow
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Попробуйте запустить этот запрос
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;
Я предлагаю вам перейти в Query Browser и сделать следующее:
Auto_increment должен сброситься на единицу после ввода новой строки в таблицу.
Я не знаю, что произойдет, если вы попытаетесь добавить строку, в которой значение поля auto_increment уже существует.
Надеюсь, это поможет!
Лучший способ - удалить поле с ИИ и добавить его снова с ИИ, работает для всех таблиц