MySQL Insert into和on Duplicate Key查询未更新

时间:2014-07-30 16:39:09

标签: mysql sql

插入前的表格(表名为ds_answer)

===============================================================================

answer_id  |   member_id  |  question_id | msgstr | type  |        tstamp

===============================================================================
   50            2             176          aaaa     show   2014-07-27 12:11:12
   51            2             177          bbbb     show   2014-07-27 12:12:23
   52            2             180          cccc     show   2014-07-27 12:12:50
===============================================================================

查询命令::

INSERT INTO `ds_answer` (`member_id`, `question_id` , `msgstr` , `type`)
  VALUES ('2', '180' , 'dddssds' , 'show' )
  ON DUPLICATE KEY UPDATE msgstr = 'dddssds'

它无法正常工作。 MySQL每次都添加了一行。但它并没有在answer_id = 52中更新msgstr列。

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

为了使ON DUPLICATE KEY UPDATE起作用,必须有一个唯一的键(索引)来触发它。在应触发ON DUPLICATE KEY UPDATE的一列或多列上创建唯一键。

通过示例插入语句,您似乎需要一个多列唯一索引:(member_id, question_id)

这样的事情:

ALTER TABLE ds_answer
  ADD UNIQUE INDEX `ui_member_question` (member_id, question_id);

答案 1 :(得分:0)

正如@therefromhere所说here

  

如果指定ON DUPLICATE KEY UPDATE,并且插入的行会导致UNIQUE索引或PRIMARY KEY中出现重复值,则MySQL会执行旧行的UPDATE。

您需要使用唯一键才能使其正常工作

查看文档http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html