在执行UPDATE查询时是否可以使用ON DUPLICATE KEY功能?

时间:2017-10-27 22:10:25

标签: mysql

我熟悉在执行INSERT查询时使用ON DUPLICATE KEY构造。我想对UPDATE查询做同样的事情,但似乎在MySQL中不允许这样做,否则我只是不知道语法。

我的表有一个唯一索引,我希望我的UPDATE查询尽可能多地更新记录,并忽略或删除会导致重复键的记录。假设的查询看起来像这样:

UPDATE votes SET user = 'foo' WHERE user = 'bar'
  ON DUPLICATE KEY <ignore update or delete row>;

我正在尝试合并数据库中的2个用户。如果该用户已经对某个主题进行了现有投票,则可以忽略重复投票,但是当发生这种情况时,我不希望整个查询失败。理想情况下,我想删除任何触发重复键的记录,如果可以将其转换为查询,那就更好了。

这将是一个相当罕见的事件,所以如果UPDATE不存在这个功能,我可以通过多个查询完成我想要的答案。

1 个答案:

答案 0 :(得分:1)

您可以通过自我加入来检查:

if /?

DEMO

无法在单个查询中合并set /?setlocal /?。您需要使用事务单独执行它们以确保原子性。 UPDATE votes AS v1 LEFT JOIN votes AS v2 ON v1.topic = v2.topic AND v2.user = 'foo' SET v1.user = 'foo' WHERE v1.user = 'bar' AND v2.user IS NULL 查询应仅删除基于主题重复的记录。

UPDATE