Mysql 如果存在,则更新它,否则插入-不带主键或唯一键(一个查询)

Mysql 如果存在,则更新它,否则插入-不带主键或唯一键(一个查询),mysql,Mysql,我有以下多对多表: id user_id comment_id like 1 1 1 true 2 1 2 false 3 2 1 true 4 2 2 true 我试图更新一条记录,如果它存在(例如,user_id=1和comment_id=1),否则创建一条新记录。我不能对user\u id和comment\u id列使用unique

我有以下多对多表:

id   user_id comment_id like
1    1       1          true
2    1       2          false
3    2       1          true
4    2       2          true    
我试图更新一条记录,如果它存在(例如,user_id=1和comment_id=1),否则创建一条新记录。我不能对user\u id和comment\u id列使用unique key,因为相同的id可以在此表中多次显示。有没有办法只用一个查询就可以做到这一点


谢谢,

根据您的帖子,对于相同的
用户id
注释id
组合,您不应该有两行,这使它成为唯一键的理想候选:

ALTER TABLE mytable
ADD CONSTRAINT user_comment_unq UNIQUE (user_id, comment_id);
一旦有了此约束,就可以使用
insert
语句和
on duplicate key update
子句。例如:

INSERT INTO mytable (`user_id`, `comment_id`, `like`)
VALUES (1, 1, TRUE)
ON DUPLICATE KEY UPDATE `like` = TRUE

根据您的帖子,对于相同的
user\u id
comment\u id
组合,您不应该有两行,这使它成为唯一键的理想候选:

ALTER TABLE mytable
ADD CONSTRAINT user_comment_unq UNIQUE (user_id, comment_id);
一旦有了此约束,就可以使用
insert
语句和
on duplicate key update
子句。例如:

INSERT INTO mytable (`user_id`, `comment_id`, `like`)
VALUES (1, 1, TRUE)
ON DUPLICATE KEY UPDATE `like` = TRUE

提示:
插入忽略。。。在重复密钥更新上
@tadman在重复密钥更新上不需要pk或唯一密钥吗?是的,但是你想要的和实用的有时是两件不同的事情。您需要一个键(
UNIQUE
constraint),否则根本无法执行。您可以通过事务和回滚的复杂组合来完成,也可以只使用传统方法。@tadman感谢您的澄清!它非常有效。提示:
INSERT-IGNORE。。。在重复密钥更新上
@tadman在重复密钥更新上不需要pk或唯一密钥吗?是的,但是你想要的和实用的有时是两件不同的事情。您需要一个键(
UNIQUE
constraint),否则根本无法执行。您可以通过事务和回滚的复杂组合来完成,也可以只使用传统方法。@tadman感谢您的澄清!它非常有效。