21 ответов:
Вы можете сбросить счетчик с:
ALTER TABLE tablename AUTO_INCREMENT = 1для InnoDB вы не можете установить
auto_incrementзначение ниже или равно самому высокому текущему индексу. (цитата из ViralPatel):обратите внимание, что вы не можете сбросить счетчик до значения меньше или равного к любым, которые уже были использованы. Для MyISAM, если значение меньше чем или равно максимальному значению в настоящее время в AUTO_INCREMENT столбец, значение сбрасывается до текущего максимума плюс один. Для InnoDB, если значение меньше текущего максимального значения в колонки, ошибка не возникает и текущее значение последовательности не изменяется.
посмотреть как сбросить автоинкремент MySQL, используя максимальное значение из другой таблицы? о том, как динамически получить приемлемого значения.
SET @num := 0; UPDATE your_table SET id = @num := (@num+1); ALTER TABLE your_table AUTO_INCREMENT =1;Я думаю, что это сделает это
просто такой:
ALTER TABLE tablename AUTO_INCREMENT = value;Ссылка:http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
существует очень простой способ с 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, и мне не нужно знать текущее максимальное значение! Таким образом, счетчик автоматического приращения будет сброшен, и он автоматически запустится с максимального значения.
есть хорошие варианты в Как Сбросить MySQL Autoincrement Столбец
отметим, что
ALTER TABLE tablename AUTO_INCREMENT = value;тут не работа для InnoDB
самые высокие ответы на этот вопрос все рекомендуют "ALTER yourtable AUTO_INCREMENT= value". Однако это работает только тогда, когда
valueв alter больше, чем текущее максимальное значение столбца autoincrement. согласно документации MySQL:вы не можете сбросить счетчик до значения меньше или равны любым, что уже были использованы. Для MyISAM, если значение меньше или равно к максимальному значению в настоящее время Столбец AUTO_INCREMENT, значение сбрасывается до текущего максимума плюс один. Для InnoDB, вы можете использовать команда ALTER table. .. AUTO_INCREMENT = значение от MySQL 5.0.3, но если значение меньше текущего максимального значения в столбце, ошибки нет возникает и текущее значение последовательности не изменяется.
по сути, вы можете только изменить AUTO_INCREMENT, чтобы увеличить значение столбца autoincrement, а не сбросить его до 1, Как ОП спрашивает во второй части вопроса. Для параметры, которые на самом деле позволяют установить AUTO_INCREMENT вниз от его текущего Макса, взгляните на переупорядочить / сбросить авто инкремент первичный ключ.
добавление обновления, потому что функциональность изменилась в MySQL 5.6. Начиная с MySQL 5.6 вы можете использовать простую таблицу ALTER с InnoDB:
ALTER TABLE tablename AUTO_INCREMENT = 1;документы обновляются, чтобы отразить это:
http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
мое тестирование также показывает, что таблица не копируется, значение просто меняется.
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остерегайтесь!!
TRUNCATE TABLE your_tableбудет удалить все в своемyour_table!!
это для пустой таблицы:
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это хорошо работает!
счетчик автоматического приращения для таблицы может быть (re)установлен двумя способами:
выполнив запрос, как и другие уже объяснил:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;С помощью верстака или другого визуального проектирования баз данных инструментов. Я собираюсь показать в Workbench, как это делается - но это не должно сильно отличаться и в другом инструменте. Щелкните правой кнопкой мыши по нужной таблице и выберите
Alter tableв контекстном меню. На дне вы можете увидеть все доступные варианты изменения таблицы. ВыбирайOptionsи вы получите эту форму:затем просто установите нужное значение в поле
Auto incrementкак показано на рисунке. Это будет в основном выполнять запрос, показанный в первом варианте.
Я попытался изменить таблицу и установить auto_increment в 1, но это не сработало. Я решил удалить имя столбца, которое я увеличивал, а затем создать новый столбец с вашим предпочтительным именем и установить этот новый столбец для увеличения с самого начала.
обновить последний плюс один код
ALTER TABLE table_name AUTO_INCREMENT = (SELECT (id+1) id FROM table_name order by id desc limit 1);
я погуглил и нашел этот вопрос, но ответ, который я действительно ищу, соответствует двум критериям:
- используя чисто 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
Я предлагаю вам перейти в браузер запросов и сделать следующее:
- перейдите к схемам и найдите таблицу, которую вы хотите изменить.
- щелкните правой кнопкой мыши и выберите Копировать инструкцию create.
- откройте вкладку результат и вставьте инструкцию create их.
- перейдите к последней строке инструкции create и найдите Auto_Increment=N, (Где N-текущее число для поля auto_increment.)
- заменить N на 1.
- пресс ctrl+введите.
Auto_increment должен сбросить до одного, как только вы введете новую строку в таблицу.
Я не знаю, что произойдет, если вы попытаетесь добавить строку, где значение поля auto_increment уже существует.
надеюсь, что это поможет!
существует очень простой способ с phpmyadmin на вкладке "операции", вы можете установить, в настройках таблицы, автоинкремент на номер, который вы хотите.



Comments