2017-03-05 2 views
0

행을 업데이트하려고하거나 행이 없으면 삽입하려고합니다. 하지만 INSERT ON DUPLICATE KEY UPDATE은 고유 한 열을 사용하지 않기 때문에 작동하지 않습니다.존재하는 경우 업데이트하는 방법

INSERT INTO table (id, user, date, points) VALUES 
(1, 1, '2017-03-03', 25) 
(2, 1, '2017-03-04', 25) 
(3, 2, '2017-03-03', 100) 
(4, 2, '2017-03-04', 150) 

각 사용자에게는 점수를받는 날마다 행이 있습니다.

MySQL에 대한 단일 호출을 사용하여 존재하거나 삽입하는 경우 업데이트 할 수있는 방법이 있습니까?

답변

0

예. 당신은 대답 insert on duplicate key update을 알고있는 것 같습니다.

CREATE UNIQUE INDEX unq_table_user_date ON table(user, date); 

그런 다음 당신이 할 수 있습니다 :

INSERT INTO table (id, user, date, points) 
    VALUES (1, 1, '2017-03-03', 25), 
      (2, 1, '2017-03-04', 25), 
      (3, 2, '2017-03-03', 100), 
      (4, 2, '2017-03-04', 150) 
    ON DUPLICATE KEY UPDATE points = VALUES(points) + points; 

ON DUPLICATE KEY UPDATE 어떤 작동하며 모든 고유 인덱스 당신은 올바른 고유 인덱스가 필요합니다. VALUES(points) 구문은 열의 새 값을 가져옵니다.

+0

나는 SET이라는 단어에 구문 오류가 발생했습니다. 그것을 제거하고 그것은 매력처럼 작동합니다. – greg

+0

@ 집합. . . 손가락은'UPDATE '뒤에'SET'을 쓴다. 나는 그들에게 무엇이 들어 있는지 확신하지 못한다. –

관련 문제