我的索引设置为字段: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的第二个条目则执行此查询。
我错过了什么?
答案 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;