mysql重复密钥更新问题

时间:2012-02-27 19:22:43

标签: mysql

我的索引设置为字段:testsuite_id,我正在执行以下查询:

 INSERT INTO testsuite_dates (testsuite_id,start_date,end_date) 
 VALUES ('27798','2012:02:27 00:00:00','2012:02:28 00:00:00') 
 ON DUPLICATE KEY UPDATE testsuite_id='27798';

如果testsuite_id的条目存在,我希望这会更新条目,如果不存在则插入它,但是如果我第二次插入具有相同testsuite_id的第二个条目则执行此查询。

我错过了什么?

4 个答案:

答案 0 :(得分:4)

然后testsuite_id上没有PRIMARY或UNIQUE键。

答案 1 :(得分:3)

“重复密钥更新”仅更改您在“更新”部分中指定的字段。您只更新了关键字段,它首先触发了约束违规。其他字段会被静默删除,因此您可以有效地执行update yourtable set id=id where id=xxx

您必须列出要更新的每个字段:

INSERT INTO testsuite_dates (testsuite_id,start_date,end_date) 
VALUES ('27798','2012:02:27 00:00:00','2012:02:28 00:00:00') 
ON DUPLICATE KEY UPDATE 
    start_date=values(start_date), end_date=values(end_date)

请注意在更新部分中使用values()函数。这允许您引用已插入的NEW值,并将其用于更新部分。这样可以节省您在同一查询中两次嵌入相同数据的麻烦。对于一些日期或数字来说并不是什么大不了的事,但如果你要插入大的blob,它可以节省大量的查询字符串。

答案 2 :(得分:0)

您是否将testsuite_id设置为主键,或者具有唯一约束

答案 3 :(得分:0)

INSERT INTO testsuite_dates (testsuite_id,start_date,end_date) 
 VALUES ('27798','2012:02:27 00:00:00','2012:02:28 00:00:00') 
 ON DUPLICATE KEY UPDATE testsuite_id=testsuite_id+1;