Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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
Mysql “是否有非特定于数据库的命令?”;插入或更新";_Mysql_Sql_Oracle - Fatal编程技术网

Mysql “是否有非特定于数据库的命令?”;插入或更新";

Mysql “是否有非特定于数据库的命令?”;插入或更新";,mysql,sql,oracle,Mysql,Sql,Oracle,我们为测试(mysql)和生产(oracle)系统使用不同的数据库。是否有一个公共sql语句用于更新行(如果存在)和插入(如果不存在) 问候,, Marc答案是否定的。对于MYSQL,情况会有所不同,而对于Oracle,情况会有所不同 在MYSQL中,它就像 INSERT INTO tabelname (id, name) VALUES (1, 'abc') ON DUPLICATE KEY UPDATE id = id; DECLARE x NUMBER:=0; BEGIN

我们为测试(mysql)和生产(oracle)系统使用不同的数据库。是否有一个公共sql语句用于更新行(如果存在)和插入(如果不存在)

问候,,
Marc

答案是否定的。对于MYSQL,情况会有所不同,而对于Oracle,情况会有所不同

在MYSQL中,它就像

INSERT INTO tabelname (id, name) 
VALUES (1, 'abc') 
ON DUPLICATE KEY UPDATE id = id;
DECLARE
    x NUMBER:=0;
BEGIN
    SELECT nvl((SELECT 1 FROM tabelname WHERE name = 'abc'), 0) INTO x FROM dual;

    IF (x = 1) THEN
        INSERT INTO tabelname (1,'abc')
    END IF;

END;
在甲骨文中,这就像

INSERT INTO tabelname (id, name) 
VALUES (1, 'abc') 
ON DUPLICATE KEY UPDATE id = id;
DECLARE
    x NUMBER:=0;
BEGIN
    SELECT nvl((SELECT 1 FROM tabelname WHERE name = 'abc'), 0) INTO x FROM dual;

    IF (x = 1) THEN
        INSERT INTO tabelname (1,'abc')
    END IF;

END;
或者您可以像这样使用“合并”:

merge into tablename a
    using (select 1 id, 'abc' name from dual) b
        on (a.name = b.name)
    when not matched then
   insert( id, name)
      values( b.id, b.name)

如果由于mysql兼容性而无法使用Oracle的优点,为什么要使用Oracle?最常见的命令是
merge
upsert
。当生产系统是Oracle时,为什么要在mysql上进行测试?!?为什么不干脆在oracle中合并?@miraclefoxx:-是的,这也是一个选择,事实上是一个更好的选择。我只是想让OP明白,MYSQL和Oracle@miraclefoxx:-也使用合并选项进行了更新!没有共同的说法。即使两个数据库支持合并,语义也可能不同。使用MVCC和并发合并很难实现。我认为在PostreSQL中,他们决定同时实现这两个方面,尽管他们通常对ANSII SQL遵从性非常严格。