Mysql sql更新如果行存在,则插入如果不存在-在一行中

Mysql sql更新如果行存在,则插入如果不存在-在一行中,mysql,Mysql,我在这里读了几个答案,虽然看起来像是重复的,但我认为情况有点特殊 我有一个包含以下字段的表 id |语言| id |项目|代码|项目|名称 我想要的是当我尝试输入新行时,检查语言\u id和项目\u code是否存在,并根据结果进行更新或插入。我知道我可以做类似的事情 从表中选择*,其中语言\u id=1,项目\u代码=PH001 并检查返回的行数 我想知道的是,如果我可以在一行上完成,那么你可以如何做这样的事情: If exists (SELECT * FROM table WHERE

我在这里读了几个答案,虽然看起来像是重复的,但我认为情况有点特殊

我有一个包含以下字段的表

id |语言| id |项目|代码|项目|名称

我想要的是当我尝试输入新行时,检查
语言\u id
项目\u code
是否存在,并根据结果进行更新或插入。我知道我可以做类似的事情

从表中选择*,其中语言\u id=1,项目\u代码=PH001

并检查返回的行数


我想知道的是,如果我可以在一行上完成,那么你可以如何做这样的事情:

    If exists (SELECT * FROM table WHERE language_id=1 AND item_code=PH001)
    Then
    update statement
    ELSE 
    Insert statement
作为SQL查询尝试以下操作:

IF (SELECT COUNT(*) FROM table WHERE language_id=1 AND item_code='PH001') > 0 THEN UPDATE_QUERY;
ELSE INSERT_QUERY;
END IF;

如果要检查重复项,则应为这些列编制索引。如果复合键不是唯一的,那么就有了amgiuity,在某些情况下可以更新,但在其他情况下可以插入(否则,复合键中永远不会有重复的值)


因此,您应该创建一个唯一的索引并使用。

@JimGarrison我确实阅读了手册,但您没有阅读我的问题:D,
关于重复键
,其中我要查找重复行
,其中语言id和项目代码
等于数据。如果你想取笑我,至少要有效率,谢谢你。如果你想检查重复项,这些列应该被索引。如果复合键不是唯一的,那么就有了amgiuity,在某些情况下可以更新,但在其他情况下可以插入(否则,复合键中永远不会有重复的值)。因此,您应该创建一个唯一的索引并使用upsert语法。@JimGarrison您在第二条评论中看到,我觉得我在一周内学到的东西比我自己学到的要多,只需要几行。Downvoter,您能告诉我我的查询有什么问题吗?我也想知道:PI不是Downvoter,但查询会给出一个答案error@Gervs,你能解释一下原因吗?因为我不确定。当你运行一个查询时,它应该总是以SELECT、UPDATE、INSERT、CREATE、DROP、SET、ALTER等开头。