MySQL:如果值存在,则对行进行更新,如果值不存在,则插入 [重复]
Posted
技术标签:
【中文标题】MySQL:如果值存在,则对行进行更新,如果值不存在,则插入 [重复]【英文标题】:MySQL: If values exist do an update on the row, if values do not exist do an insert [duplicate] 【发布时间】:2019-02-16 15:26:34 【问题描述】:我需要一个 sql 语句,如果行存在则更新,如果行不存在则插入。 我有一个包含以下值的表...
id 是(唯一 + 自动递增)
id | selectedID | userID | question
------------------------------------
1 | 1 | 3 | 10
如果用户 ID 为 3 的用户选择了不同的 selectedID,例如2 对于问题 10,我希望表格更新为:
id | selectedID | userID | question
-----------------------------------
1 | 2 | 3 | 10
如果用户 ID 为 3 的用户再次为问题 10 选择 selectedID 2,我不希望它插入另一行。
如果 id 为 3 的用户为问题 11 选择了一个 selectedID,我希望它插入一个新行,例如第 11 题的 2:
id | selectedID | userID | question
-----------------------------------
1 | 2 | 3 | 10
2 | 2 | 3 | 11
【问题讨论】:
您的问题是什么?你的代码在哪里?你被困在哪里了?请阅读:How to create a Minimal, Complete, and Verifiable example 和 How do I ask a good question? 【参考方案1】:您正在寻找insert on duplicate key update
。
基本上,您希望(userId, questionId)
的组合是唯一的。首先设置一个唯一的约束/索引:
create unique index unq_t_userId_questionId on t(userId, questionId);
然后使用on duplicate key update
插入:
insert into t (userId, questionId, selectedId)
values (@userId, @questionId, @selectedId)
on duplicate key update selectedId = values(selectedId);
【讨论】:
工作完美感谢@GordonLinoff!【参考方案2】:INSERT on duplicate key
您可以在 mysql 中使用上述构造,如果存在键,则更新记录,如果未找到主键进行插入。 MERGE 在甲骨文中做了一些事情。
如果您在 INSERT 中指定 ON DUPLICATE KEY UPDATE 选项 语句和新行导致 UNIQUE 中的重复值或 PRIMARY KEY索引,MySQL根据旧行更新 新的价值观。
【讨论】:
以上是关于MySQL:如果值存在,则对行进行更新,如果值不存在,则插入 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Excel公式,如果一列中存在重复且另一列中存在特定文本,则对列进行求和
WordPress 和 SQL - 如果列值不存在,则从另一个表更新和插入