Подтвердить что ты не робот

Слишком много автоматических приращений с ON DUPLICATE KEY UPDATE

У меня есть базовая таблица со столбцами:

  • id (первичный с AI)
  • имя (уникальное)
  • и т.д.

Если уникальный столбец не существует, вставьте строку, иначе UPDATE строку....

INSERT INTO pages (name, etc)
VALUES
  'bob',
  'randomness'
ON DUPLICATE KEY UPDATE
 name = VALUES(name),
 etc = VALUES(etc)

Проблема в том, что если он выполняет UPDATE, значение auto_increment в столбце id увеличивается. Поэтому, если выполняется целая группа UPDATES, идентификатор 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, я надеюсь, что это не вызовет много проблем. Да?

4b9b3361

Ответ 1

Я не думаю, что есть способ обойти это поведение INSERT ... ON DUPLICTE KEY UPDATE.

Однако вы можете поместить два оператора: один UPDATE и один INSERT в одну транзакцию

Ответ 2

В двойных ключевых функциях MySQL точно так же, как и два отдельных запроса, один для выбора, затем один либо для обновления выбранной записи, либо для вставки новой записи. Делать это программно так же быстро и предотвратить эту проблему в будущем, а также сделать ваш код более портативным.