【问题标题】:Insert into table or update if exists multiple unique index (MySQL)如果存在多个唯一索引(MySQL),则插入表或更新
【发布时间】:2014-12-30 13:10:32
【问题描述】:

如果组合(poll_id、user_id、question_id)不存在,我想将值插入表中,否则我想更新列答案。

表格如下:

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 添加唯一索引 unique_index(poll_id, user_id, question_id);

当我运行以下查询时,它将首先插入第一个值集,然后使用第二个值集中的值更新答案字段。

INSERT INTO poll_results (poll_id, user_id, question_id, answer) VALUES(1, 1, 1, 'User 1'),(1, 2, 1, 'User 2') ON DUPLICATE KEY UPDATE answer=VALUES(answer )

我看到的是:

poll_id - user_id - question_id - 回答

1 | 1 | 1 |用户 1

我想看到的是:

poll_id |用户 ID |问题ID |回答

1 | 1 | 1 |用户 1

1 | 2 | 1 |用户 2

我怎样才能达到最终结果?

【问题讨论】:

  • 您必须在其中有另一个唯一索引。您可以将SHOW CREATE TABLE poll_results 的输出添加到您的问题中吗?
  • 当我用phpMyAdmin直接在MySQL中运行代码时,插入了两条记录。您是否也在 phpMyAdmin 中执行代码?
  • @tadman 不知道那个命令。运行 SHOW CREATE TABLE 查询后,发现我实际上在 poll_id 上有另一个唯一键。在我删除唯一索引后它工作正常!
  • 在为这类事情构建测试数据时,您应该使用1,2,31,3,4,因为您会注意到那里的混淆,最后给您1,2,4。跨度>

标签: mysql database sql-update sql-insert


【解决方案1】:

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

删除任何可能会干扰此操作的索引,您应该会没事的。

【讨论】:

  • 就我而言,这就是问题所在。我不知道我指定了其他唯一索引。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
相关资源
最近更新 更多