从 PostgreSQL 维基,
MERGE
通常用于合并两个表,并在 2003 年的 SQL 标准中引入。语句(REPLACE
MySQL 扩展)或UPSERT序列尝试UPDATE
, 或失败时,INSERT
。这类似于UPDATE
,然后对于不匹配的行,INSERT
。并发访问是否允许可能导致行丢失的修改与实现无关。
进一步的 PostgreSQLINSERT ... ON CONFLICT DO NOTHING/UPDATE
以UPSERT销售,并在 9.5 中添加
那是MERGE
什么?它是如何融入其中的?
一般来说,
UPSERT
是由INSERT
MERGE
专注于合并/同步表并提供DELETE
支持。UPSERT
缺乏条件性,在 PostgreSQL 中,您可以通过代理被违反的索引来指定条件,例如但它没有提供指定多个条件的能力,也没有提供
DELETE
任何条件的能力,这两者都允许更丰富的规则集,从而可以“以最少的工作同步表”,这似乎是MERGE
.另外,从Peter Geoghegan 的帖子中强调了一些差异“SQL
MERGE
与 UPSERT 完全不同”也可以看看
MERGE
语法(已删除)