MySQL插入如果不存在则在两个条件为真时更新

时间:2018-02-15 20:29:54

标签: mysql sql web-services

我的表格字段是

SELECT `ogr_no`, `yurt_id`, `kat_no`, `kat_ismi`, `gorev_bol_ismi`, `baskan_mi`, `tarih` FROM `s_yem_tem` WHERE 1

此处ogr_noyurt_id是我的条件;如果它们同时存在且真实,那么我需要更新其余部分,如果不是我需要插入。通过两个查询,我能够解决我的需求,但如何使用一个查询来处理它。做了很多搜索。 ON DUPLICATE KEY根据一个值解决问题,但我需要检查其中两个。 我需要的最接近的逻辑是

 IF EXISTS(SELECT * FROM s_yem_tem WHERE s_yem_tem.ogr_no = 101 AND s_yem_tem.yurt_id = 1) 
    THEN
    UPDATE s_yem_tem SET   kat_no = 1, kat_ismi = 'Mescid Katı', gorev_bol_ismi = 'Etüt', baskan_mi = '1'
    ELSE 
    INSERT INTO s_yem_tem ( ogr_no, yurt_id, kat_no, kat_ismi, gorev_bol_ismi, baskan_mi) 
    VALUES (101,1,4,'Yemekhane Katı','Etüt',0)

但不适用于MySQL。任何建议请

2 个答案:

答案 0 :(得分:1)

您可以创建一个包含您正在检查的两列的唯一索引,这样您就可以使用ON DUPLICATE KEY。

答案 1 :(得分:1)

此操作称为upsert,在MySQL中使用insert . . . on duplicate key update实现。

首先,您需要一个唯一的索引/约束来识别重复项:

create unique index unq_s_yem_tem_2 on s_yem_tem(ogr_no, yurt_id);

然后你会这样做:

INSERT INTO s_yem_tem ( ogr_no, yurt_id, kat_no, kat_ismi, gorev_bol_ismi, baskan_mi) 
    VALUES (101, 1, 4, 'Yemekhane Katı', 'Etüt', 0)
    ON DUPLICATE KEY UPDATE
        kat_no = 1, kat_ismi = 'Mescid Katı', gorev_bol_ismi = 'Etüt', baskan_mi = 1;

两件事。我发现yurt_id非常令人回味。我不认为我曾经使用过有蒙古包的数据库。

其次,通常,on duplicate key上的列会获取更新中指定的值。我注意到你的几列不同。