2010-05-03 7 views
2

중복 키 업데이트를 사용하여 mySQL 쿼리가 작동하지 않습니다.mysql 중복 중복 키 업데이트

mySQL Error: 1062 - Duplicate entry 'hr2461809-3' for key 'fname' 

표는 다음과 같습니다 :

I 오류지고있어 내가 사용

INSERT INTO images SET picid=732, fname='hr2461809-3', path='pictures/' ON DUPLICATE KEY UPDATE picid=732, fname='hr2461809-3', path='pictures/' 

:

id int(10) NOT NULL default '0', 
picid int(10) unsigned NOT NULL default '0', 
fname varchar(255) NOT NULL default '', 
type varchar(5) NOT NULL default '.jpg', 
path varchar(255) NOT NULL default '',  
PRIMARY KEY (id), 
UNIQUE KEY fname (fname), 
KEY picid (propid) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

그리고 깨고 쿼리하는 것은 이것이다 아무 문제없이 앱의 다른 위치에서 매우 유사한 쿼리. 나는 왜 이것이 깨지는 지 모르겠습니다. fname에 대한 고유 키가 침해 당하면 단순히 위반이 발생한 행을 업데이트 할 것이라고 예상 했습니까? 어떤 도움

+0

왜 INSERT 명령으로 SET을 사용합니까 ??? – animuson

+0

@animuson 그게 뭐가 잘못 되었 니? 지정되지 않은 필드는 기본값이나 NULL (허용되는 경우)로 설정됩니다. – rjh

+0

@rjh :'(picid, fname, path) VALUES (732, 'hr2461809-3', 'pictures /')'를 사용하는 것이 잘못된 이유는 무엇입니까? 언어를 혼란스럽게 만드는 것은 이런 것들입니다. 왜 모든 사람들이 INSERT VALUES에 충실 할 수 없습니까? – animuson

답변

3

에 대한

덕분에 나는 당신이 ON DUPLICATE KEY IGNORE을 원하는 생각합니다.

키 충돌이 발생한 경우 동일한 데이터를 다시 삽입하기 만하면됩니다. 당연히 다른 중복 충돌이 발생합니다. 여전히 중복 행입니다.

ON DUPLICATE KEY IGNORE 행이 이미있는 경우 삽입을 중단합니다.

+0

더 자세히 설명하기 위해 ON UPDATE KEY UPDATE는 쿼리에 삽입되는 정보를 변경하기 만하므로 동일하게 만들면 오류가 발생합니다. 이 함수는 거기에 있으므로 같은 쿼리에서 변경하여 오류가 발생하지 않도록 할 수 있습니다. – animuson

+0

고마워! 나는 정보를 평가한다. – julio