Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查值是否存在然后在Sql中更新或插入的最有效方法是什么_Sql_Mysql - Fatal编程技术网

检查值是否存在然后在Sql中更新或插入的最有效方法是什么

检查值是否存在然后在Sql中更新或插入的最有效方法是什么,sql,mysql,Sql,Mysql,我需要更新表中的日期值,如果该值不存在,则必须插入该值 在MySql中实现这一点的最佳方法是什么 目前我正在使用 SELECT Id INTO LId FROM ATABLE WHERE ID = FID; IF LId IS NULL THEN INSERT INTO ATABLE(abc) Values (2) ELSE UPDATE ATABLE Set Abc = 2 Where Id = LId END IF; 但这会命中数据库3次 有更

我需要更新表中的日期值,如果该值不存在,则必须插入该值

在MySql中实现这一点的最佳方法是什么

目前我正在使用

   SELECT Id INTO LId  FROM ATABLE WHERE ID = FID;
   IF LId IS NULL THEN
     INSERT INTO ATABLE(abc) Values (2)
   ELSE
     UPDATE ATABLE Set Abc = 2 Where Id = LId
   END IF;
但这会命中数据库3次

有更好的方法吗?

如果您需要的话

我用

这就是你要找的:)


有关更多详细信息,请参阅。

对于MySql Upsert,您可能希望查看此文件。它重点介绍了几种方法,包括执行更新,然后使用左连接进行插入:

update t1 as l
    inner join t2 as r on l.a = r.d
    set l.b = r.e, l.c = r.f;

insert into t1 (a, b, c)
    select l.d, l.e, l.f
    from t2 as l
        left outer join t1 as r on l.d = r.a
    where r.a is null;
在重复密钥更新时,可以使用单个语句upsert:

insert into t1(a, b, c)
    select d, e, f from t2
    on duplicate key update b = e, c = f;

我不怎么使用mysql,但我认为它有改进之处?MERGE语句更接近标准SQL,但mysql似乎还没有——v5.4手册没有提到它。
insert into t1(a, b, c)
    select d, e, f from t2
    on duplicate key update b = e, c = f;