Вставьте в дубликате обновления Mysql ошибка - PullRequest
1 голос
/ 28 сентября 2011

Я пытаюсь вставить обновление двойного ключа в Mysql, используя ниже:

INSERT INTO `generic_client_data` (id, keyword, client_id, desc_id) 
VALUES (NULL, qqqq, 115, 0) ON DUPLICATE KEY 
UPDATE keyword=VALUES(qqqq), client_id=VALUES(115), desc_id=VALUES(0)

, но это дает мне эту ошибку:

#1064 - You have an error in your SQL syntax; check the manual that 
        corresponds to your MySQL server version for the right syntax 
        to use near '115), desc_id=VALUES(0)' at line 1

Есть ли причина, почему?

1 Ответ

6 голосов
/ 28 сентября 2011

ЗНАЧЕНИЕ «функция» в части запроса UPDATE относится к именам столбцов, которые вы использовали в части INSERT. То, что вы хотите, это:

INSERT INTO `generic_client_data` (id, keyword, client_id, desc_id) 
VALUES (NULL, 'qqqq', 115, 0) ON DUPLICATE KEY 
UPDATE keyword=VALUES(keyword), client_id=VALUES(client_id), desc_id=VALUES(desc_id);

Таким образом, вы можете вернуться к любым значениям, которые вы хотели вставить; они могут быть вычисленными значениями или они могут быть получены из запроса SELECT. Когда вы входите в более сложные запросы, я думаю, вы найдете это гораздо более удобным, чем то, что вы пытались сделать.

В большинстве случаев, когда вы используете ON DUPLICATE KEY UPDATE, у вас не будет причин делать что-либо кроме

UPDATE x=VALUES(x), y=VALUES(y), z=VALUES(z)

для любых столбцов, которые вы хотите вставить.

Если вы действительно просто хотите вставить значения, которые вы указали для различных столбцов, то пропустите VALUES (); Вы можете просто сделать это так:

INSERT INTO `generic_client_data` (id, keyword, client_id, desc_id) 
VALUES (NULL, 'qqqq', 115, 0) ON DUPLICATE KEY 
UPDATE keyword='qqqq', client_id=115, desc_id=0

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

Не мешало бы прочесть руководство, как подсказывает сообщение об ошибке: http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...