2012-03-03 164 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