Вставить в ошибку при дублировании обновления Mysql

#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 — значение