如果不存在则插入,如果存在则更新

时间:2015-02-01 06:49:08

标签: mysql

我的数据库表上有三列

user_idpost_idvote

如果user_id和post_id不存在,我想插入新数据。但是如果user_id和post_id两列都存在,我将能够更新'vote'列值。我将user_id设置为唯一但由于我希望用户在不同的帖子上插入投票,因此证明它不起作用。

以下查询仅更新了投票的值,因为user_id已存在。当且仅当user_id post_id存在时,我想更新它

我使用了这个SQL查询

 INSERT INTO polls (user_id,post_id,vote) VALUES (1,2,5)
  ON DUPLICATE KEY UPDATE vote= ?;

这是我的问题

2 个答案:

答案 0 :(得分:1)

您必须创建唯一的组合键

Create unique index your_index_name on yourtable (field_one,field_two)
然后执行insert into , on duplicate key逻辑

您的代码无法正常工作是绝对合乎逻辑的,因为您唯一的密钥是user_id,因此如果您想检查user_id和post_id的唯一性,那么您应该将其设置为。

答案 1 :(得分:0)

不要认为你可以纯粹在MySQL中做到这一点:*(post_id必须是唯一的,你说这不符合你的业务逻辑。此外,如果检测到多个密钥,它们是在生成的查询中由OR加入,这将使您的内容更加复杂。以下是手册的摘录,其中abON DUPLICATE KEY和{{1}}中涉及的密钥{1}}查询:

  

如果a = 1或b = 2匹配多行,则只更新一行。通常,您应该尽量避免在具有多个唯一索引的表上使用ON DUPLICATE KEY UPDATE子句。