Py学习  »  DATABASE

mysql:如果值存在,则更新行,如果值不存在,则插入[重复]

codeCat • 5 年前 • 1372 次点击  

这个问题已经有了答案:

我需要一个SQL语句,如果行存在,它将更新,如果行不存在,则插入。 我有一张表,上面有下列值…

ID为(唯一+自动递增)

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

如果用户id为3的用户选择了不同的selectedid,例如问题10中的2,我希望表更新为:

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
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/44014
 
1372 次点击  
文章 [ 2 ]  |  最新文章 5 年前
sandesh dahake
Reply   •   1 楼
sandesh dahake    6 年前

INSERT on duplicate key

你可以在MySQL中使用上面的构造,如果存在键,如果没有找到主键,就可以更新记录。在甲骨文中有点合并。

如果在insert中指定了on duplicate key update选项 语句和新行在unique或 主键索引,mysql根据 新的价值观。

Gordon Linoff
Reply   •   2 楼
Gordon Linoff    6 年前

你在找 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);