Столбец автоинкремента MySQL подскакивает на 10 - почему?

У меня есть пара таблиц, в которых я создал идентификатор объекта как Int или Bigint, и в обоих случаях они, кажется, автоматически увеличиваются на 10 (т.е. первая вставка - это объект с идентификатором 1, вторая - с идентификатором объекта 11, третья - идентификатор объекта 21 и т. д.). Два вопроса:

  1. Почему это так?

  2. Это проблема?

Это не проблема, хотя это может указывать на желание иметь возможность вставлять значения между другими и, таким образом, полагаться на идентификатор в качестве критерия упорядочивания. Это не хорошо.

Vinko Vrsalovic 16.10.2008 02:35

Это также может быть проблемой, если вы беспокоитесь о том, что ID слишком быстро закончится (если вы ожидаете МНОГО записей), поскольку вы используете только 1/10 диапазона, для которого у вас есть хранилище.

acrosman 16.10.2008 02:52

Я предполагаю, что ваш auto_increment_increment установлен на что-то другое, чем 1, из-за репликации. В реплицированных таблицах нельзя использовать 1 из-за потенциальных конфликтов ключей.

tymtam 07.07.2011 08:14
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
43
3
37 982
5

Ответы 5

Убедитесь, что начальное значение автоинкремента не равно 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. Благодарность!

Nick Berardi 16.10.2008 02:43

HQ говорит, что его нельзя менять, а в документации MySQL говорится, что его нельзя изменять для отдельных таблиц. Так что, полагаю, мне придется жить с верхним пределом в 1,8 квинтиллиона идентификаторов, а не с 18,4 квинтиллионами.

Jon Galloway 16.10.2008 03:26

Кажется, что ваш первый оператор выбора показывает, какое следующее значение в последовательности, а не на сколько оно увеличивается.

Nick Rolando 08.01.2013 02:45

Значение приращения автоматического увеличения устанавливается в системных переменных 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.

Отлично. Это мне очень помогает. Спасибо.

Kabkee 23.11.2015 10:46

технически не отвечает на вопрос, но, тем не менее, это очень полезная информация.

mt_xing 07.06.2016 21:40

Этот ответ следует объединить с принятым ответом, он так же важен, как и принятое в настоящее время объяснение.

Todd 12.07.2017 17:31

значение автоинкремента может перескакивать при использовании вставки с атрибутом IGNORE в случае, когда запись не была создана

insert IGNORE into my_table set column=1

Другие вопросы по теме