一站式掌握数据库“插入或更新”操作的核心语句
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);
INSERT ... ON CONFLICT DO UPDATE 实现类似功能(非标准 MERGE)。INSERT ... ON DUPLICATE KEY UPDATE 替代。INSERT OR REPLACE 或 ON CONFLICT 子句。假设我们有一个用户积分表 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);
ON 条件中的字段有唯一约束或主键,避免多行匹配导致错误。MERGE INTO 是处理“插入或更新”逻辑的优雅方案,能显著简化应用代码并提升数据操作效率。 尽管各数据库实现略有差异,但核心思想一致。掌握它,是迈向高效数据工程师的重要一步!