ON DUPLICATE KEY UPDATE только для первичных ключей? - PullRequest
0 голосов
/ 03 июля 2018

Есть ли способ ограничить «ON DUPLICAYE KEY UPDATE», чтобы запускать только в том случае, если дубликат ключа является ПЕРВИЧНЫМ КЛЮЧОМ таблицы? (а не если конфликт генерируется УНИКАЛЬНЫМ КЛЮЧОМ)

Например, в следующей таблице:

CREATE TABLE users (
    id INT(16) UNSIGNED AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL UNIQUE,
    PRIMARY KEY (id),
    UNIQUE (username)
);

Я хотел бы запустить обновление, только если столбец id создает конфликт, и выдает ошибку как обычно, если конфликт произошел из-за уникального ключа username.

Редактировать :

Я работаю над очень простой структурой PHP. Ранее у меня был один метод save(), который различал INSERT и UPDATE на основании наличия свойства id объекта, для которого он был вызван.

Теперь я переписал этот метод, используя запрос INSERT INTO ... ON DUPLICATE KEY UPDATE, но когда я пытаюсь вставить (например) пользователя с уже существующим значением username, он обновляет этого пользователя, а не выдает ошибку.

Я знаю, что это правильное поведение, я просто хотел узнать, есть ли способ достичь того же результата только на ПЕРВИЧНОМ КЛЮЧЕ.

1 Ответ

0 голосов
/ 03 июля 2018

on duplicate key запускает как первичные ключи, так и уникальные ключи.

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

Следовательно, вы можете получить желаемое поведение, просто не включив предложение on duplicate key и исключив id из insert.

...