MySQL при обновлении дублированного ключа - PullRequest
7 голосов
/ 15 мая 2009

Если у меня есть такой запрос, как я могу сослаться на значения, которые я уже дал в операторе обновления, чтобы мне не нужно было вставлять те же данные для повторного запроса? Пример Я хотел бы обновить значение col1 с помощью «xxx», но теперь мне нужно снова ввести «xxx» в дублирующем выражении. Есть ли возможность ссылаться на эти значения в дублирующем утверждении?

INSERT INTO TABLENAME(col1, col2) 
VALUES (’xxx’, ‘yyy’) 
ON DUPLICATE KEY UPDATE col1 = ‘zzz’

Ответы [ 2 ]

33 голосов
/ 03 февраля 2010

Это должно сработать и немного более элегантно:

INSERT INTO TABLENAME(col1, col2) 
VALUES (’xxx’, ‘yyy’) 
ON DUPLICATE KEY UPDATE col1 = VALUES(col1)

Обратите внимание, что вам не нужно обновлять часть первичного ключа строки. Мы знаем, что это то же самое, потому что произошло столкновение.

3 голосов
/ 31 июля 2012

В PHP я делаю это, чтобы решить проблему:

$fields = "a = 1, b = 2, c = 3";
$sql = "INSERT INTO some_table SET id = $id, $fields ON DUPLICATE KEY UPDATE $fields";
mysql_query($sql);
...