2009-05-15 3 views
7

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

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

Я просто оставить это здесь, очень хорошее решение: http://stackoverflow.com/a/450695/1101589 – Ekonoval

ответ

33

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

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

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

+0

Это ключевое слово VALUES в последняя строка имеет решающее значение! – physicalattraction

3

В 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); 
Смежные вопросы