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

时间:2014-10-21 07:17:46

标签: mysql

我在这里阅读了几个答案,虽然它看起来像是重复的但我认为这个场景有点具体。

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

  

id | language_id | item_code | ITEM_NAME

我想要的是指我尝试输入新行,检查language_iditem_code是否存在,并根据结果进行更新或插入。我知道我可以做点什么

  

SELECT * FROM table WHERE language_id = 1 AND item_code = PH001

并检查返回的行数

我想要的是如果我可以在一行上完成它以及如何

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

你可以这样做:

    If exists (SELECT * FROM table WHERE language_id=1 AND item_code=PH001)
    Then
    update statement
    ELSE 
    Insert statement

答案 2 :(得分:0)

尝试将其作为SQL查询:

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