首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:如果存在值,则对行执行更新,如果值不存在,则执行插入

问MySQL:如果存在值,则对行执行更新,如果值不存在,则执行插入
EN

Stack Overflow用户
提问于 2019-02-16 15:26:34
回答 2查看 47关注 0票数 0

我需要一个sql语句,如果该行存在,它将更新;如果该行不存在,则需要插入。我有一张有以下值的表格..。

id是(唯一+自动增量)

代码语言:javascript
复制
id | selectedID | userID  | question
------------------------------------
1  |    1       |   3     |   10

如果具有userID 3的用户为问题10选择了一个不同的selectedID (例如2),我希望将表更新到:

代码语言:javascript
复制
id | selectedID | userID  | question
-----------------------------------
1  |    2       |   3     |   10

如果userID 3的用户再次为问题10选择selectedID 2,我不希望它插入另一行。

如果id 3的用户为问题11选择了一个selectedID,我希望它插入一个新行,例如问题11的2行:

代码语言:javascript
复制
id | selectedID | userID  | question
-----------------------------------
1  |    2       |   3     |   10
2  |    2       |   3     |   11
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-16 15:30:56

你在找insert on duplicate key update。

基本上,您希望组合(userId, questionId)是唯一的。首先设置一个唯一的约束/索引:

代码语言:javascript
复制
create unique index unq_t_userId_questionId on t(userId, questionId);

然后将on duplicate key update用于插入:

代码语言:javascript
复制
insert into t (userId, questionId, selectedId)
    values (@userId, @questionId, @selectedId)
    on duplicate key update selectedId = values(selectedId);
票数 1
EN

Stack Overflow用户

发布于 2019-02-16 15:36:11

插入重复键

您可以在mysql中使用上面的构造,如果存在密钥,如果没有找到主键,则更新记录。在甲骨文中有些合并。

如果在INSERT语句中指定ON重复键更新选项,而新行在唯一或主键索引中导致重复值,则MySQL将根据新值对旧行执行更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54724625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档