列匹配时的MySQL更新或插入

时间:2014-07-09 15:18:01

标签: mysql if-statement insert

我目前遇到的问题是,当两列(event_id和question_id)与另一行具有相同的值时,我需要插入或更新一行 例如,我有事件1和事件的问题2 现在,当已经插入的条目时,它应该将此更新为新值(已选择)

但我尝试的语法不起作用。你能帮我解决这个问题吗?

IF EXISTS (SELECT id as @info FROM votes WHERE event_id = 1 AND question_id = 2)
  UPDATE votes SET selected='1,2,3' WHERE id=@info
ELSE
  INSERT INTO `votes` (`id`, `event_id`, `question_id`, `selected`, `user_id`) VALUES (NULL,      1, 2, 3, 4)

2 个答案:

答案 0 :(得分:0)

MySQL提供了一个方便的" ON DUPLICATE KEY UPDATE"子句(也称为" upsert")。我认为这应该有效:

INSERT INTO `votes` (`event_id`, `question_id`, `selected`, `user_id`) VALUES
    (1, 2, 3, 4)
ON DUPLICATE KEY UPDATE;

您需要确保UNIQUE上存在(event_id, question_id)约束。

答案 1 :(得分:0)

您的问题似乎表明,event_idquestion_id配对在一起将是一个唯一索引,因此首先我们需要运行:

ALTER TABLE `votes` ADD UNIQUE `event_question`(`event_id`, `question_id`);

这将为我们提供一个独特的索引,使我们可以运行:

INSERT INTO `votes` (`event_id`, `question_id`, `selected`, `user_id`) VALUES (1, 2, 3, 4) ON DUPLICATE KEY UPDATE selected='1,2,3';

如果未找到对特定event_idquestion_id的投票,则会插入新行。