【发布时间】:2013-02-21 12:44:54
【问题描述】:
我正在寻找标准 SQL“UPSERT”语句。如果存在,则一次调用插入和更新。
我正在寻找一个有效的、高效的跨平台调用。
我见过MERGE、UPSERT、REPLACE、INSERT .. ON DUPLICATE UPDATE,但没有满足需求的语句。
顺便说一句,我使用 MYSQL 和 HSQLDB 进行单元测试。我知道 HSQLDB 是有限的,可能无法满足我的需求,但即使没有它,我也找不到标准的方法。 一个语句,现在只有 MYSQL 和 HSQLDB 也够用了。
我已经四处寻找了一段时间,但没有得到答案。
我的桌子:
CREATE TABLE MY_TABLE (
MY_KEY varchar(50) NOT NULL ,
MY_VALUE varchar(50) DEFAULT NULL,
TIME_STAMP bigint NOT NULL,
PRIMARY KEY (MY_KEY)
);
有什么想法吗?
【问题讨论】:
-
INSERT .. ON DUPLICATE UPDATE是mYSQL中的键。你能显示一些记录或表格结构吗? -
是的,但它仅在 MYSQL 中受支持。 HSQLDB 和所有其他人都不使用它...
-
有一个 ANSI 合并 (en.wikipedia.org/wiki/Merge_%28SQL%29),但并非在所有 DBMS 中都实现。所以没有希望有一个通用的命令。
-
MYSQL 不支持 :(
-
以防万一您可以使用 ruby,我的(警告自我提升)Upsert 库将自动在 mysql 和 postgres 中定义一个可以作为单个命令调用的 upsert 函数。包括广泛的测试。