我有一个基本上有三列的表:user_id,setting和value。我正在尝试使用以下代码:
INSERT INTO 'user_settings'(user_id, setting, value)
VALUES (1234, setting_1, 500)
ON DUPLICATE KEY UPDATE user_id = 1234, setting = setting_1'
这在创建新设置时效果很好,并且它不会生成重复记录。当我想要更改值时出现问题 - 这在上一个查询运行后无效:
INSERT INTO 'user_settings'(user_id, setting, value)
VALUES (1234, setting_1, 999)
ON DUPLICATE KEY UPDATE user_id = 1234, setting = setting_1'
没有行受到影响。显然我错过了一些东西......
重要:我无法更改数据库(新主键或其他内容)。
更新:似乎我对ON DUPLICATE KEY
的理解是错误的。但问题仍然是 - 实现这一目标的最有效方式是什么?
在下面的评论中回答:“如果主要(或唯一)键是(user_id,设置),则使用:... ON DUPLICATE KEY UPDATE value = 999”。
答案 0 :(得分:2)
假设您在user_id
上确实有一个唯一键,则表示“没有行受影响”,因为您没有在第二个查询中更改任何内容。我想你想要做的就是更新value
字段:
INSERT INTO 'user_settings'(user_id, setting, value)
VALUES (1234, setting_1, 999)
ON DUPLICATE KEY UPDATE setting = setting_1,value=999
如果没有value
,您只需将user_id
和setting
字段设置为与之前相同的值,并且MySQL不需要更新记录。
如果您在user_id
上没有唯一键,则必须找到不同的方法,因为ON DUPLICATE KEY UPDATE
不会触发。