Ошибка сгенерированных первичных ключей при использовании INSERT ON DUPLICATE KEY UPDATE - PullRequest
0 голосов
/ 24 января 2012

Я разрабатываю приложение в JSF 2.0, поскольку в качестве СУБД я использую MySQL. У меня проблема с оператором INSERT ... ON DUPLICATE KEY UPDATE, он генерирует новый первичный ключ при каждом обновлении строки. Это запрос, который я использую.

INSERT INTO aanwezigheid_i (jongereId, datum, aanwezig, aankomstTijd, vertrekTijd, alternatiefKamp, redenAfwezig)
VALUES (?,?,?,?,?,?,?)
ON DUPLICATE KEY
UPDATE aanwezig = ?, aankomstTijd = ?, vertrekTijd = ?, alternatiefKamp = ?, redenAfwezig = ?

Таблица 'aanwezigheid_i' имеет следующие столбцы:

aanwezigheidId (INT (11), ПЕРВИЧНЫЙ КЛЮЧ) | jongereId | ИГД | aanwezig | aankomstTijd | vertrekTijd | alternatiefKamp | redenAfwezig

Если я вставлю первую строку, первичный ключ 'aanwezigheidId' получит значение 1. Если я обновлю эту первую строку 10 раз и вставлю вторую строку впоследствии, значение первичного ключа второй строки будет равно 12, а не 2. Что я делаю неправильно? Любая помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Если вы используете клавишу AUTO_INCREMENT, учтите, что вычисление нового значения AUTO_INCREMENT выполняется до того, как попытается выполнить INSERT. Если INSERT конвертируется в UPDATE, новое значение AUTO_INCREMENT теряется.

Это сделано специально, вы ничего не можете с этим поделать, кроме НЕ использования AUTO_INCREMENT

1 голос
/ 24 января 2012

Вы не отправляете aanwezigheidId - первичный ключ - в INSERT, поэтому создается новая строка. Предложение ON DUPLICATE KEY UPDATE вступает в силу только при вставке записи с существующим ключом.

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