插入前的表格(表名为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
列。
如何解决这个问题?
答案 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