@VasiliiSuricov You can change this option with ALTER TABLE, but in that case the new value must be higher than the highest value which is present in the AUTO_INCREMENT column.source Если нет более высокого значения, чем то, которое вы хотите установить в auto_incrementстолбце ed, вы также можете уменьшить это значение. ( документация MySQL )
Сейфани
Ответы:
520
Вы можете использовать ALTER TABLEдля изменения начального значения auto_increment:
Кто-нибудь знает, можно ли это сделать БЕЗ АЛЬТЕР?
Смарт
3
Да, это возможно. Смотрите мой ответ.
Козимо
3
В MySQL 5.6 была ошибка, которая не позволяла вам уменьшить AUTO_INCREMENTзначение, но она была исправлена в 5.6.16 и 5.7.4, см. Bugs.mysql.com/bug.php?id=69882
Даниэль Вандерслуис,
3
Посмотрите на предупреждение Козимо о восстановлении стола, если вы сделаете это!
h00ligan
15
Чтобы уточнить: установка начального значения на 5, означает, что следующая вставка будет 5.
Стин Шютт
97
Да, вы можете использовать ALTER TABLE t AUTO_INCREMENT = 42утверждение. Однако вы должны знать, что это приведет к перестройке всей таблицы, по крайней мере, с InnoDB и некоторыми версиями MySQL. Если у вас уже есть набор данных с миллионами строк, его выполнение может занять очень много времени .
По моему опыту, лучше сделать следующее:
BEGIN WORK;-- You may also need to add other mandatory columns and valuesINSERTINTO t (id)VALUES(42);ROLLBACK;
Таким образом, даже если вы откатываете транзакцию, MySQL сохранит значение автоинкремента, и изменение будет применено немедленно.
Вы можете убедиться в этом, выпустив SHOW CREATE TABLE tзаявление. Тебе следует увидеть:
> SHOW CREATETABLE t \G
***************************1.row***************************Table: t
CreateTable:CREATETABLE`t`(...) ENGINE=InnoDB AUTO_INCREMENT=43...
СПАСИБО! SET foreign_key_checks = 0;также полезно для этого.
dnozay
Великолепная идея! Nitpick: SHOW CREATE TABLE tфактически вернет 43, то есть следующее значение после вставки 42.
Петркотек
2
@cosimo, подожди, разве это не документально ? В руководстве сказано, что так должно работать? Если нет, он может сломаться в другой (будущей) настройке mysql.
Pacerier
1
@Pacerier да, вы правы. Это зависит от того, как MySQL работает в настоящее время. В будущем это может не сработать. Однако, учитывая историю MySQL, я предполагаю, что она продолжит работать в течение длительного времени.
Козимо
@cosimo, Надеюсь, они документируют это, чтобы надежный код мог использовать этот хороший хак. На данный момент код, который хочет быть надежным, не может использовать это.
Pacerier
13
Как автоматически увеличить на единицу, начиная с 10 в MySQL:
createtable foobar(
id INT PRIMARYKEY AUTO_INCREMENT,
moobar VARCHAR(500));ALTERTABLE foobar AUTO_INCREMENT=10;INSERTINTO foobar(moobar)values("abc");INSERTINTO foobar(moobar)values("def");INSERTINTO foobar(moobar)values("xyz");select*from foobar;'10','abc''11','def''12','xyz'
Это автоматически увеличивает столбец id на единицу, начиная с 10.
Автоматическое увеличение MySQL на 5, начиная с 10:
droptable foobar
createtable foobar(
id INT PRIMARYKEY AUTO_INCREMENT,
moobar VARCHAR(500));SET@@auto_increment_increment=5;ALTERTABLE foobar AUTO_INCREMENT=10;INSERTINTO foobar(moobar)values("abc");INSERTINTO foobar(moobar)values("def");INSERTINTO foobar(moobar)values("xyz");select*from foobar;'11','abc''16','def''21','xyz'
Это автоматически увеличивает столбец id на 5 каждый раз, начиная с 10.
Вы также можете сделать это с помощью phpmyadmin. Просто выберите таблицу, чем перейти к действиям. И измените Авто приращение ниже опций таблицы. Не забудьте нажать на старт
You can change this option with ALTER TABLE, but in that case the new value must be higher than the highest value which is present in the AUTO_INCREMENT column.
source Если нет более высокого значения, чем то, которое вы хотите установить вauto_increment
столбце ed, вы также можете уменьшить это значение. ( документация MySQL )Ответы:
Вы можете использовать
ALTER TABLE
для изменения начального значения auto_increment:См. Ссылку MySQL для более подробной информации.
источник
AUTO_INCREMENT
значение, но она была исправлена в 5.6.16 и 5.7.4, см. Bugs.mysql.com/bug.php?id=69882Да, вы можете использовать
ALTER TABLE t AUTO_INCREMENT = 42
утверждение. Однако вы должны знать, что это приведет к перестройке всей таблицы, по крайней мере, с InnoDB и некоторыми версиями MySQL. Если у вас уже есть набор данных с миллионами строк, его выполнение может занять очень много времени .По моему опыту, лучше сделать следующее:
Таким образом, даже если вы откатываете транзакцию, MySQL сохранит значение автоинкремента, и изменение будет применено немедленно.
Вы можете убедиться в этом, выпустив
SHOW CREATE TABLE t
заявление. Тебе следует увидеть:источник
SET foreign_key_checks = 0;
также полезно для этого.SHOW CREATE TABLE t
фактически вернет43
, то есть следующее значение после вставки42
.Как автоматически увеличить на единицу, начиная с 10 в MySQL:
Это автоматически увеличивает столбец id на единицу, начиная с 10.
Автоматическое увеличение MySQL на 5, начиная с 10:
Это автоматически увеличивает столбец id на 5 каждый раз, начиная с 10.
источник
Процедура автоматического исправления AUTO_INCREMENT значения таблицы
источник
Если вам нужна эта процедура для имен переменных полей,
id
это может быть полезно:источник
Вы также можете сделать это с помощью phpmyadmin. Просто выберите таблицу, чем перейти к действиям. И измените Авто приращение ниже опций таблицы. Не забудьте нажать на старт
источник
просто экспортируйте таблицу с данными .. затем скопируйте ее как SQL
Теперь измените значение автоинкремента и выполните sql.
источник