Могу ли я использовать INSERT INTO ... On DUPLICATE KEY без использования значения auto_increment?

Я пытаюсь написать запрос, чтобы проверить, существует ли запись (на основе пары предложений, а не уникального идентификатора), если такой поиск возвращает записи, то мне нужно обновить все найденные записи, если ничего не найдено, тогда мне нужно ВСТАВИТЬ запись. Обратите внимание, что я не могу использовать IF EXISTS, потому что я пытаюсь сделать запрос для сценария на стороне клиента, а не на стороне сервера. Таким образом, я пришел к выводу, что идея INSERT INTO .... ON DUPLICATE KEY

Могу ли я сделать это, не зная идентификатора ключа строки? Поэтому, если я найду запись, в которой accountid = 17 и name = 'Mike', обновите ее, сделав имя Mike A, если в этом предложении 2 нет записи, затем вставьте запись.

Это попытка, которая дает мне синтаксическую ошибку

INSERT INTO test (name, accountid) VALUES ('Mike', 17)
  ON DUPLICATE KEY 
UPDATE test SET name='Mike A' WHERE name ='Mike' AND accountid = 17

Может ли этот метод обработать то, что я пытаюсь сделать? Если да, то можете ли вы исправить мой синтаксис?

Спасибо

1 ответ

Решение

Единственный способ заставить это работать - если у вас есть первичный ключ или уникальное ограничение для полей. Из документации:

Если вы укажете ON DUPLICATE KEY UPDATE, и будет вставлена ​​строка, которая приведет к дублированию значения в индексе UNIQUE или PRIMARY KEY, выполняется UPDATE старой строки. Например, если столбец a объявлен как UNIQUE и содержит значение 1, следующие два оператора имеют одинаковый эффект:

create table test (name varchar(100), accountid int);
insert into test values ('Mike', 17);
alter table test add unique (name, accountid);

insert int test (name, accountid) values ('Mike', 17)
on duplicate key update name='Mike A';

Без уникального ключа он вставит дубликат записи.

Другие вопросы по тегам