У меня есть базовая таблица со столбцами:
- id (основной с ИИ)
- имя (уникальное)
- и т.д
Если уникальный столбец не существует, ВСТАВЬТЕ строку, в противном случае ОБНОВИТЕ строку....
INSERT INTO pages (name, etc)
VALUES
'bob',
'randomness'
ON DUPLICATE KEY UPDATE
name = VALUES(name),
etc = VALUES(etc)
Проблема в том, что если он выполняет UPDATE, значение auto_increment в столбце id увеличивается. Так что, если выполняется целая куча ОБНОВЛЕНИЙ, id auto_increment проходит через крышу.
Очевидно, это была ошибка: http://bugs.mysql.com/bug.php?id=28781
... но я использую InnoDB на mySQL 5.5.8 на виртуальном хостинге.
Другие люди, у которых возникли проблемы, не имеющие решения несколько лет назад: предотвратить автоинкремент при вставке дубликатов MYSQL и Почему автоинкремент MySQL увеличивается при неудачных вставках?
Идеи по исправлению? Возможно, я как-то неправильно структурировал базу данных?
******EDIT****: Кажется, что добавление innodb_autoinc_lock_mode = 0 в ваш файл my.ini устраняет проблему, но какие у меня есть варианты для виртуального хостинга?
****** РЕДАКТИРОВАТЬ 2 *******: ОК, я думаю, что мой единственный вариант — перейти на MyISAM в качестве механизма хранения. Я надеюсь, что, будучи мега новичком в MySQL, это не вызовет много проблем. Ага?
innodb_autoinc_lock_mode = 0
замедляет работу concurenteINSERT
из-за использования table-lock для поля auto-inc. Это может быть плохо. - person Enyby   schedule 12.08.2016