2012-03-03 196 views
0

在MySQL中的ON DUPLICATE KEY UPDATE中遇到一些麻煩。下面是試圖運行的查詢。重複密鑰更新拒絕更新

INSERT INTO `Overall` (`rsn` , `starting_xp` , `starting_lvl`) VALUES ('iWader' , '195843626' , '2281') ON DUPLICATE KEY UPDATE `current_xp` = '195843626' AND `current_lvl` = '2281' 
  • 它插入很好,但是當有一個重複它不更新,並且犯規拋出任何錯誤。
  • 奔跑穿過PMA查詢不返回任何錯誤,犯規更新
  • 刪除對重複密鑰更新部分返回一個重複鍵錯誤

這是我的表

CREATE TABLE IF NOT EXISTS `overall` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `rsn` varchar(12) NOT NULL, 
    `starting_xp` int(10) unsigned NOT NULL, 
    `starting_lvl` int(10) unsigned NOT NULL, 
    `current_xp` int(10) unsigned NOT NULL, 
    `current_lvl` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `rsn` (`rsn`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 

回答

1

ON DUPLICATE KEY UPDATE之後,您不需要使用and與字段,請使用,來代替。

ON DUPLICATE KEY UPDATE `current_xp` = '195843626', `current_lvl` = '2281' 
+0

更確切地說,'AND'是一個語法錯誤。你必須使用','。 – 2012-03-03 18:59:44

+0

@邁克爾,對不起,修好了,我現在要去睡覺了。 – Starx 2012-03-03 19:01:21

1

嘗試的結構這個:

INSERT INTO `Overall` (`rsn` , `starting_xp` , `starting_lvl`) VALUES ('iWader' , '195843626' , '2281') ON DUPLICATE KEY UPDATE `current_xp` = '195843626', `current_lvl` = '2281'; 

AND在你的UPDATE子句是錯誤的。 AND用於布爾表達式 like「is foo true AND bar true?」 在這裏你想要更新列current_xp,current_lvl。

+0

請提供一個解釋以及您的解決方案(這是正確的) - 一個值得讚賞的答案永遠不只是一行代碼_try this_。 – 2012-03-03 18:52:56

+0

@Michael我完全同意並編輯了我的答案,但有時學習效果可能會更高,如果您必須自己搜索錯誤。不要只是想着「k,就是和」,你會再次回顧整個問題,並且......你明白了。想想...... – fancyPants 2012-03-03 19:04:33