#mysql #sql
#mysql #sql
Вопрос:
Я пытаюсь вставить при обновлении дубликата ключа в 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:
ЗНАЧЕНИЯ «функция» в части ОБНОВЛЕНИЯ запроса относятся к именам столбцов, которые вы использовали в части ВСТАВКИ. Чего вы хотите, так это:
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)
для любых столбцов, которые вы хотели вставить.
Если вы действительно просто хотели вставить значения, которые вы указали для различных столбцов, то оставьте ЗНАЧЕНИЯ (); вы могли бы просто сделать это так:
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
Комментарии:
1.
qqqq
= указанное вами значение, а не СТОЛБЕЦ2. id, ключевое слово, client_id, desc_id — это значения, а qqqq — значение