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

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

Могу ли я сделать это, не зная идентификатора ключа строки? Поэтому, если я найду запись, в которой accountid = 17 и имя = «Майк», обновите ее, чтобы сделать имя «Майк А», если нет записи с этими двумя пунктами, а затем вставьте запись.

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

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

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

Спасибо


person Jaylen    schedule 22.07.2013    source источник


Ответы (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';

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

person sgeddes    schedule 22.07.2013