插入表或更新如果存在多个唯一索引(MySQL)

插入表或更新如果存在多个唯一索引(MySQL)

问题描述:

我有一个问题,如果组合(poll_id,user_id,question_id)不存在,我想要插入值到一个表中,否则我想更新列答案。插入表或更新如果存在多个唯一索引(MySQL)

表如下:

poll_results poll_id - INT(11)| user_id - int(11)| question_id - int(11)|答案 - 用VARCHAR(100)

我已经设置了独特的(poll_id,USER_ID,question_id):

ALTER TABLE poll_results ADD UNIQUE INDEX unique_indexpoll_iduser_idquestion_id);

当我运行下面的查询时,它将首先插入第一个值集,然后用来自第二个值集的值更新答案字段。 (1,1,'User 1'),(1,2,1,'User 2')ON DUPLICATE KEY UPDATE answer = VALUES(1,1,'User 1')答案)

我看到的是:

poll_id - USER_ID - question_id - 答案

1 | 1 | 1 |用户1

我想看到的是:

poll_id | user_id | question_id |回答

1 | 1 | 1 |用户1

1 | 2 | 1 |用户2

我该如何达到最终结果?

+0

你必须在那里有另一个唯一的索引。你可以将'SHOW CREATE TABLE poll_results'的输出添加到你的问题中吗? – tadman 2014-11-03 19:44:34

+0

当我用phpMyAdmin直接在MySQL中运行代码时,插入了两条记录。你是否也在phpMyAdmin中执行代码? – Barry 2014-11-03 19:46:25

+0

@tadman不知道那个命令。发现在运行SHOW CREATE TABLE查询后,我实际上在poll_id上有另一个唯一键。我删除了独特的索引后,它工作正常! – Wesley 2014-11-03 19:56:04

ON DUPLICATE KEY功能的工作方式是触发任何UNIQUE类型索引,而不仅仅是您打算触发的那个索引。

删除任何可能干扰这个的索引,你应该没问题。

+0

在我的情况下,这是问题所在。我不知道我有其他指定的唯一索引。再次感谢! – Wesley 2014-11-04 21:15:31