2010-05-03 94 views
2

我卡在使用對重複密鑰更新MySQL查詢。MySQL在重複鍵UPDATE

,我發現了錯誤:

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

表看起來是這樣的:

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; 

,這就是打破了查詢是這樣的:

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

我使用一個非常類似的查詢在應用程序的其他地方沒有問題。我不確定爲什麼這個會打破。我期望當fname上的UNIQUE KEY被違反時,它會簡單地更新發生違規行的行嗎?

感謝所有幫助

+0

你爲什麼要使用SET與INSERT命令??? – animuson 2010-05-03 16:44:43

+0

@animuson那有什麼問題?任何未指定的字段將被設置爲其默認值,或者NULL(如果允許)。 – rjh 2010-05-03 16:46:25

+0

@rjh:這有什麼錯用'(picid,FNAME,路徑)VALUES(732, 'hr2461809-3', '圖片/')'?像這樣的事情使得語言如此混亂,爲什麼不能每個人都堅持使用INSERT VALUES? – animuson 2010-05-03 16:49:59

回答

3

我想你想ON DUPLICATE KEY IGNORE

在發生重大沖突時,您只是要求重新插入相同的數據。毫不奇怪,這會導致另一次關鍵衝突,因爲它仍然是重複行!如果行已經存在

ON DUPLICATE KEY IGNORE將中止插入。

+0

爲了進一步說明,對重複密鑰更新只是改變被插入與查詢什麼信息,所以如果你把它同它仍然會出錯誤。那個函數就在那裏,所以你可以在同一個查詢中對它進行修改,這樣就不會出錯。 – animuson 2010-05-03 16:47:20

+0

謝謝你們!我很欣賞這些信息。 – julio 2010-05-03 16:55:23