从PostgreSQL维基,
MERGE通常用于合并两个表,并在2003年的SQL标准中引入。REPLACE语句( MySQL扩展)或UPSERT序列尝试UPDATE或失败时的INSERT。这类似于UPDATE,然后对于不匹配的行,INSERT。并发访问是否允许可能导致行丢失的修改是独立于实现的。
此外,PostgreSQL的INSERT ... ON CONFLICT DO NOTHING/UPDATE被推广为UPSERT,并在9.5中添加
那么MERGE是什么呢?它是如何融入其中的呢?
发布于 2018-04-07 09:12:45
一般来说,
UPSERT是由INSERT构建的MERGE侧重于合并/同步表,并提供DELETE支持。UPSERT缺乏条件性,在PostgreSQL中,您可以通过被违反的索引的代理来指定条件,例如
ON CONFLICT ON CONSTRAINT countries_pkey DO NOTHING;
ON CONFLICT (country) DO NOTHING;但它没有提供指定多个条件的能力,也没有在任何条件下提供DELETE的能力,这两种条件都允许一组更丰富的规则,从而使“以最少的工作量同步表”成为可能,这似乎是MERGE的目标。
作为另一件事,来自SQLMERGEis与UPSERT完全不同的的文章强调了一些不同之处
https://dba.stackexchange.com/questions/203292
复制相似问题