我的数据库表上有三列
user_id
,post_id
和vote
如果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= ?;
这是我的问题
答案 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
加入,这将使您的内容更加复杂。以下是手册的摘录,其中a
和b
是ON DUPLICATE KEY
和{{1}}中涉及的密钥{1}}查询:
如果a = 1或b = 2匹配多行,则只更新一行。通常,您应该尽量避免在具有多个唯一索引的表上使用ON DUPLICATE KEY UPDATE子句。