MariaDB ON DUPLICATE KEY UPDATE автоинкремент - PullRequest
0 голосов
/ 21 декабря 2018

Недавно я увидел в своей базе данных (InnoDB), что мой столбец «ID», для которого установлено автоинкремент, действительно считается немного странным.Когда я обновляю запись с помощью

INSERT INTO users (user, group) VALUES ('username', 'group') ON DUPLICATE KEY UPDATE username = 'username', group = 'group'

, автоинкремент подсчитывает идентификатор, так что теперь моя таблица выглядит следующим образом:

----------------
|id|user |group|
----------------
|1 |test |3    |
|2 |test2|5    |
|5 |foo  |2    |
|6 |bar  |4    |
|10|user |2    |
----------------

Я прочитал об этой «проблеме», но на самом деле ненайдено и ответьте, как сделать так, чтобы поле автоинкремента не учитывалось, если обновляется только запись.

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

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

Я призываю вас сделать математику.INT составляет 4 байта и содержит значения до 2 ^ 31-1 (или 2 ^ 32-1 для UNSIGNED INT).Если бы вы генерировали 1 идентификатор auto-inc каждую секунду (независимо от того, приводит ли он к INSERT или его удаляли), это длилось бы 136 лет.

Если вы все еще обеспокоены, тогда используйте UNSIGNED BIGINTкоторый имеет 2 ^ 64-1 различных значений.Этот тип данных позволит вам использовать 1000 идентификаторов в секунду в течение 584 542 046 лет.

0 голосов
/ 21 декабря 2018

INSERT IGNORE, REPLACE, IODKU (который вы используете) и некоторые другие команды будут сначала назначать новые идентификаторы, , а затем использовать их или 'сжечь их.Живите с этим.

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

Поскольку идентификаторы не видны за пределами транзакции до COMMIT, другие запросы могут видеть id = 7, прежде чем id = 6 станет видимым.Сносит хаос с некоторыми упрощенными конструкциями для очередей.

...