У меня есть пара таблиц, в которых я создал идентификатор объекта как Int или Bigint, и в обоих случаях они, кажется, автоматически увеличиваются на 10 (т.е. первая вставка - это объект с идентификатором 1, вторая - с идентификатором объекта 11, третья - идентификатор объекта 21 и т. д.). Два вопроса:
Почему это так?
Это проблема?
Это также может быть проблемой, если вы беспокоитесь о том, что ID слишком быстро закончится (если вы ожидаете МНОГО записей), поскольку вы используете только 1/10 диапазона, для которого у вас есть хранилище.
Я предполагаю, что ваш auto_increment_increment установлен на что-то другое, чем 1, из-за репликации. В реплицированных таблицах нельзя использовать 1 из-за потенциальных конфликтов ключей.






Убедитесь, что начальное значение автоинкремента не равно 10.
Вы можете проверить:
SELECT Auto_increment FROM information_schema.tables WHERE table_name='the_table_you_want';
Как отмечалось в другом месте, вы можете изменить, используя системную переменную @@ set_auto_increment_increment
SET @@auto_increment_increment=1;
Если вы хотите начать значения с числа, отличного от одного, вы можете пойти:
ALTER TABLE tbl AUTO_INCREMENT = 100;
О, я обнаружил свою проблему - это то, как устанавливается auto_increment_increment. Благодарность!
HQ говорит, что его нельзя менять, а в документации MySQL говорится, что его нельзя изменять для отдельных таблиц. Так что, полагаю, мне придется жить с верхним пределом в 1,8 квинтиллиона идентификаторов, а не с 18,4 квинтиллионами.
Кажется, что ваш первый оператор выбора показывает, какое следующее значение в последовательности, а не на сколько оно увеличивается.
Значение приращения автоматического увеличения устанавливается в системных переменных MySQL.
Глянь сюда: http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#option_mysqld_auto-increment-increment
Спасибо @Jim Fiorato за предоставленную ссылку.
Чтобы проверить, насколько увеличивается значение автоматического увеличения, используйте следующий запрос:
SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 10 |
| auto_increment_offset | 4 |
+--------------------------+-------+
Пожалуйста, не меняйте auto_increment_increment. ClearDB делает это специально. Это объясняется в документация:
ClearDB uses circular replication to provide master-master MySQL support. As such, certain things such as auto_increment keys (or sequences) must be configured in order for one master not to use the same key as the other, in all cases. We do this by configuring MySQL to skip certain keys, and by enforcing MySQL to use a specific offset for each key used. The reason why we use a value of 10 instead of 2 is for future development.
Отлично. Это мне очень помогает. Спасибо.
технически не отвечает на вопрос, но, тем не менее, это очень полезная информация.
Этот ответ следует объединить с принятым ответом, он так же важен, как и принятое в настоящее время объяснение.
значение автоинкремента может перескакивать при использовании вставки с атрибутом IGNORE в случае, когда запись не была создана
insert IGNORE into my_table set column=1
Это не проблема, хотя это может указывать на желание иметь возможность вставлять значения между другими и, таким образом, полагаться на идентификатор в качестве критерия упорядочивания. Это не хорошо.