Data changes

SQL MERGE / UPSERT

根据匹配条件插入或更新数据;不同数据库语法存在差异。

适用版本/范围: 常见 SQL 条目,提供通用 SQL、MySQL/MariaDB、PostgreSQL、SQL Server、SQLite 与 Oracle Database 参考;语法和功能支持因数据库及版本而异。English

语法

MERGE INTO target USING source ON match_condition WHEN MATCHED THEN UPDATE SET ... WHEN NOT MATCHED THEN INSERT ...;

用法示例

示例(标准风格语法);请确认数据库支持对应关键字。

MERGE INTO inventory AS t USING incoming AS s ON (t.sku = s.sku) WHEN MATCHED THEN UPDATE SET quantity = s.quantity WHEN NOT MATCHED THEN INSERT (sku, quantity) VALUES (s.sku, s.quantity);

SQLite 风格示例;实际方言行为可能不同。

INSERT INTO inventory (sku, quantity) VALUES ('A-1', 12) ON CONFLICT (sku) DO UPDATE SET quantity = excluded.quantity;

参数、选项与子句

参数 / 子句说明
Target table / columns指定语句影响的表和列。
VALUES / SET / source query提供插入值或赋予新值。
WHERE限制受影响的行;省略可能更改所有行。
RETURNING / OUTPUT在方言支持时返回已更改的行。
Transaction多项更改需整体成功或失败时使用事务。

方言参考文档

安全提示

执行前请核对命令和目标路径。修改文件、服务、账户、磁盘、权限或数据库的操作可能难以撤销;建议先在安全环境测试并保留备份。

参考文档 ↗返回目录