2011-08-24 3 views
1

user_id, setting 및 value라는 세 개의 열이있는 테이블이 있습니다. 다음 코드를 사용하려고합니다 :MySQL : 고급 삽입이없는 경우

INSERT INTO 'user_settings'(user_id, setting, value) 
VALUES (1234, setting_1, 500) 
ON DUPLICATE KEY UPDATE user_id = 1234, setting = setting_1' 

이 설정은 새로운 설정을 만들 때 유용하며 중복 된 레코드를 생성하지 않습니다. 어떤 행이 영향을받지 않습니다

INSERT INTO 'user_settings'(user_id, setting, value) 
VALUES (1234, setting_1, 999) 
ON DUPLICATE KEY UPDATE user_id = 1234, setting = setting_1' 

: 나는 이전 쿼리를 실행 한 후이 작동하지 않습니다 부가가치를 변경할 때 문제가 온다. 분명히 뭔가를 놓치고있어 ...

중요 : 데이터베이스를 변경할 수 없습니다 (새로운 기본 키 또는 다른 것).

업데이트 : 내 이해가 ON DUPLICATE KEY 인 것 같습니다. 그러나이 문제를 해결하는 가장 효율적인 방법은 무엇입니까?

아래의 설명에 대한 대답은입니다. "주 (또는 고유) 키가 (user_id, 설정)이면 : ... 중복 키 업데이트 값 = 999"를 사용하십시오.

+0

기본 키는 무엇입니까? – Yahia

+3

UPDATE 부분에'user_id'를 할당하면 안됩니다. 삽입 오류가 발생 된 키이기 때문입니다. –

+0

기본 키가 나열되어 있지 않습니다. 테이블에 더 이상 관련이없는 열이 있습니다. –

답변

2

user_id에 실제로 고유 키가 있다고 가정하면 두 번째 쿼리에서 아무 것도 변경하지 않기 때문에 "영향을받지 않은 행"이 표시됩니다. 거기 value없이

INSERT INTO 'user_settings'(user_id, setting, value) 
VALUES (1234, setting_1, 999) 
ON DUPLICATE KEY UPDATE setting = setting_1,value=999 

, 당신은 단지 그들이 예전 같은 값으로 user_idsetting 필드를 설정하고 있으며, MySQL은 '아무튼 : 나는 당신이하고 싶은 것은 업데이트뿐만 아니라 value 분야라고 생각합니다 기록을 갱신 할 필요가 없다.

user_id에 고유 키가없는 경우 ON DUPLICATE KEY UPDATE이 실행되지 않으므로 다른 방법을 찾아야합니다.

+0

'user_id'에 고유 키가 없으므로 'ON DUPLICATE KEY'를 잘못 사용하고있는 것처럼 보입니다. 어떤 아이디어로 접근해야합니까? –

+0

@ 루크 : PK는 무엇입니까? 테이블에 다른 고유 키가 있습니까? –

+1

Primary (또는 Unique) 키가'(user_id, setting)'이면'... ON DUPLICATE KEY UPDATE value = 999'를 사용하십시오. –