Как я могу избежать автоинкремента при обновлении дубликата ключа? - PullRequest
0 голосов
/ 22 января 2019

Посмотрите на этот запрос:

insert into `admin_config`(name)
values ('cached_branch_products_2')
on duplicate key update value = 1

Возможны две возможности.Либо insert, либо update.Когда insert срабатывает (выполняется), тогда новая строка будет добавлена ​​в таблицу и, естественно, AUTO_INCREMENT будет увеличена.Хорошо, все хорошо.

Но когда update срабатывает (выполняется), AUTO_INCREMENT также увеличивается.Зачем?И как мне этого избежать?

1 Ответ

0 голосов
/ 22 января 2019

Не беспокойся об этом.Столбцы с автоинкрементом не гарантируют отсутствие пробелов.В дополнение к этой ситуации вы удаляете и откаты транзакций также выводят их из строя.В других базах данных распараллеливание и оптимизация также приводят к пробелам.

В основном, просто привыкните к этому.Целью такого столбца является предоставление уникального целочисленного идентификатора для каждой строки.И это работает, независимо от пробелов.Эти идентификаторы фиксируют порядок вставки.

Попытка создать последовательность без пропусков для этой цели была бы очень дорогой, в основном требуя блокировки всей таблицы для каждой вставки и удаления.Это может существенно повлиять на производительность некоторых приложений.Таким образом, правила немного смягчены, чтобы обеспечить то, что действительно необходимо, даже если результаты не соответствуют всем эстетическим стандартам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...