2011-09-28 1 views
1

:삽입 내가 아래 사용하여 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 

는 이유가 있나요 왜?

답변

6

쿼리의 UPDATE 부분에있는 VALUES "함수"는 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 쿼리에서 왔을 수 있습니다. 좀 더 복잡한 쿼리가 생기면이 작업을 수행하는 것보다 훨씬 편리하다고 생각합니다. 중복 키 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

# 1054 만드는 것
+0

- '필드 목록'에서 알 수없는 열 'QQQQ을'오류 ... – user952543

+0

'qqqq' = 값 당신은 COLUMN이 아닌 – ajreal

+0

id, keyword, client_id, desc_id가 값이고 qqqq가 값 – user952543

관련 문제