我需要一条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
答案 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)
您可以在mysql中使用以上构造,如果没有找到主键,则将更新记录(如果存在主键)。 MERGE在oracle中做了一些事情。
如果在INSERT中指定ON DUPLICATE KEY UPDATE选项 语句,并且新行在UNIQUE中导致重复值,或者 PRIMARY KEY索引,MySQL根据以下内容对旧行执行更新 新值。