Merge Into

一站式掌握数据库“插入或更新”操作的核心语句

什么是 MERGE INTO?

MERGE INTO 是 SQL 标准中用于实现“存在则更新,不存在则插入”(Upsert)功能的语句。 它可以高效地将源表(或子查询)的数据与目标表进行比对,并根据匹配情况执行 INSERT、UPDATE 或 DELETE 操作。

该语句广泛应用于数据同步、ETL(数据抽取、转换、加载)流程以及缓存更新等场景。

基本语法结构

标准 SQL 的 MERGE INTO 语法如下:

MERGE INTO target_table AS t

USING source_table_or_query AS s

ON (t.key = s.key)

WHEN MATCHED THEN

    UPDATE SET t.col1 = s.col1, t.col2 = s.col2

WHEN NOT MATCHED THEN

    INSERT (col1, col2, key) VALUES (s.col1, s.col2, s.key);

主流数据库支持情况

实际应用示例

假设我们有一个用户积分表 user_points,需要根据每日任务结果更新或新增用户积分:

-- Oracle / SQL Server 示例

MERGE INTO user_points t

USING (SELECT 'U1001' AS user_id, 50 AS points FROM dual) s

ON (t.user_id = s.user_id)

WHEN MATCHED THEN

    UPDATE SET t.points = t.points + s.points

WHEN NOT MATCHED THEN

    INSERT (user_id, points) VALUES (s.user_id, s.points);

注意事项

  1. 确保 ON 条件中的字段有唯一约束或主键,避免多行匹配导致错误。
  2. 某些数据库(如 SQL Server)要求语句以分号结尾。
  3. 性能方面,MERGE 通常优于先查后插/更的组合操作,但需合理使用索引。
  4. 在高并发场景下,注意事务隔离级别,防止幻读或重复插入。

总结

MERGE INTO 是处理“插入或更新”逻辑的优雅方案,能显著简化应用代码并提升数据操作效率。 尽管各数据库实现略有差异,但核心思想一致。掌握它,是迈向高效数据工程师的重要一步!