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

时间:2019-02-16 15:26:34

标签: php html mysql sql

我需要一条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,我希望它插入新行,例如2代表问题11:

id | selectedID | userID  | question
-----------------------------------
1  |    2       |   3     |   10
2  |    2       |   3     |   11

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

INSERT on duplicate key

您可以在mysql中使用以上构造,如果没有找到主键,则将更新记录(如果存在主键)。 MERGE在oracle中做了一些事情。

  

如果在INSERT中指定ON DUPLICATE KEY UPDATE选项   语句,并且新行在UNIQUE中导致重复值,或者   PRIMARY KEY索引,MySQL根据以下内容对旧行执行更新   新值。