Как изменить количество полей auto_increment
в MySQL с приращением по умолчанию (1) на n?
Измените шаг поля auto_increment на увеличение на
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).
Можно было бы рассмотреть нестандартные решения:
- Запустите два сервера MySQL на одном компьютере с разными портами (один с
auto_increment_increment=1
, другой сauto_increment_increment=2
) - Используйте некоторую магию на стороне сервера (PHP, ASP, ???) в сочетании с отключением таблиц
auto_increment
для ручного расчета (простой просмотр последнего идентификатора и +=2 будет в порядке) и укажите идентификатор в запросеINSERT
.
Некоторые официальные часто задаваемые вопросы по MySQL
person
mth
schedule
06.11.2009
привет, я проверил часто задаваемые вопросы, я немного запутался [вы можете настроить каждый сервер для генерации значений автоинкремента, которые не конфликтуют с другими серверами. Значение --auto-increment-increment должно быть больше, чем количество серверов (с этой страницы)] может ли кто-нибудь это объяснить?
- person sansknwoledge; 06.11.2009
идея такова: 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
@Piskvor спасибо за разъяснение, но если у меня есть более одной таблицы в моей БД, все с автоматически генерируемыми столбцами, и я хочу, чтобы только одна таблица увеличивалась с шагом, скажем, 2, а остальные следовали за 3, что мне делать?
- person sansknwoledge; 06.11.2009
Есть ли способ сделать это приращение шаг за шагом только для одной таблицы.
- 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
Я не думаю, что он делает то, что он хочет (это отвечает на вопрос, который он задает в теле своего вопроса, но не на вопрос в заголовке). Хотя вопрос конечно двусмысленный.
- person Dominic Rodger; 06.11.2009
Да, это не делает то, что он пытается сделать (теперь я отредактировал вопрос, чтобы, надеюсь, сделать его более ясным).
- 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
Это не регулирует шаг, а настраивает начальное значение.
- person Mihai Stancu; 26.09.2012
Это только начальное значение
- person Saher Ahwal; 15.02.2013