Измените шаг поля auto_increment на увеличение на

Как изменить количество полей auto_increment в MySQL с приращением по умолчанию (1) на n?


person sansknwoledge    schedule 06.11.2009    source источник
comment
Вы хотите изменить следующее используемое значение или шаг, используемый между значениями (например, значение шага 2, использовать 1, 3, 5, 7 и т. д.)?   -  person Dominic Rodger    schedule 06.11.2009
comment
извините, если вопрос неоднозначен, да, правильно, я хочу, чтобы auto_increment выполнялся так, как вы указали (например, идентификатор (1,3) на сервере sql, который увеличивает следующее значение на 3)   -  person sansknwoledge    schedule 06.11.2009
comment
@sansknwoledge - я отредактировал вопрос, чтобы он спросил, что вы имели в виду!   -  person Dominic Rodger    schedule 06.11.2009


Ответы (4)


Если вы хотите изменить шаг автоинкремента с 1 на N, то есть решение. Это можно сделать на стороне сервера MySQL: найдите параметр запуска --auto-increment-increment или используйте следующую команду SET @@auto_increment_increment=2;, но имейте в виду, что это изменение для всего сервера (все таблицы будут увеличиваться на 2).

Можно было бы рассмотреть нестандартные решения:

  1. Запустите два сервера MySQL на одном компьютере с разными портами (один с auto_increment_increment=1, другой с auto_increment_increment=2)
  2. Используйте некоторую магию на стороне сервера (PHP, ASP, ???) в сочетании с отключением таблиц auto_increment для ручного расчета (простой просмотр последнего идентификатора и +=2 будет в порядке) и укажите идентификатор в запросе INSERT.

Некоторые официальные часто задаваемые вопросы по MySQL

person mth    schedule 06.11.2009
comment
привет, я проверил часто задаваемые вопросы, я немного запутался [вы можете настроить каждый сервер для генерации значений автоинкремента, которые не конфликтуют с другими серверами. Значение --auto-increment-increment должно быть больше, чем количество серверов (с этой страницы)] может ли кто-нибудь это объяснить? - person sansknwoledge; 06.11.2009
comment
идея такова: server={db1,db2,db3}; db01:{--auto-increment-offset=0;--auto-increment-increment=3};db02:{--auto-increment-offset=1;--auto-increment-increment=3};db03: {--auto-increment-offset=2;--auto-increment-increment=3}; поэтому db1 генерирует только идентификаторы, где (n % 3) == 0, для db2 (n % 3) == 1, для db3 (n % 3) == 2; то есть db1:3,6,9,... db2:1,4,7,... db3:2,5,8 -> нет конфликта идентификаторов - person Piskvor left the building; 06.11.2009
comment
@Piskvor спасибо за разъяснение, но если у меня есть более одной таблицы в моей БД, все с автоматически генерируемыми столбцами, и я хочу, чтобы только одна таблица увеличивалась с шагом, скажем, 2, а остальные следовали за 3, что мне делать? - person sansknwoledge; 06.11.2009
comment
Есть ли способ сделать это приращение шаг за шагом только для одной таблицы. - person M.A.K. Ripon; 19.04.2018

Вы можете изменить его, используя ALTER TABLE:

ALTER TABLE table AUTO_INCREMENT = n;

Или, если вы хотите установить его с самого начала:

CREATE TABLE table (...) AUTO_INCREMENT = n;
person Lukáš Lalinský    schedule 06.11.2009
comment
Я не думаю, что он делает то, что он хочет (это отвечает на вопрос, который он задает в теле своего вопроса, но не на вопрос в заголовке). Хотя вопрос конечно двусмысленный. - person Dominic Rodger; 06.11.2009
comment
Да, это не делает то, что он пытается сделать (теперь я отредактировал вопрос, чтобы, надеюсь, сделать его более ясным). - person Dominic Rodger; 06.11.2009

Вы также можете использовать ALTER SEQUENCE имя_последовательности INCREMENT BY N, где N — новое значение приращения.

person Sachin Chourasiya    schedule 06.11.2009

alter table <table name>  auto_increment=n

где n - число, которое вы хотите начать

person Treby    schedule 06.11.2009
comment
Это не регулирует шаг, а настраивает начальное значение. - person Mihai Stancu; 26.09.2012
comment
Это только начальное значение - person Saher Ahwal; 15.02.2013