首页 > 解决方案 > 是否有任何可以在一个语句中更新或插入的 RDBMS?

问题描述

如果我有这样的表:

ID     FirstName     LastName     Address
--     ---------     --------     -------

我想在存在 ID 时更新信息,或者在 ID 不存在时插入新行。

这可以在一个语句中完成,还是我必须检查 ID 的存在,然后插入或更新?

标签: sql

解决方案


是的。想到了三种方法:

merge是最常用的方法。SQL Server、Oracle、DB2 和 Teradata 支持这一点。请参阅相应的文档。请注意,确切的merge语法可能因数据库而异。

on duplicate key update是 MySQL 和 MariaDB(旧版本)使用的一种方法。请参阅相应的文档。

Postgres 和 SQLite 支持通过语句on conflict中的子句解决冲突insert。也就是说,许多数据库都基于旧版本的 Postgres,因此并非所有派生数据库都支持on conflict.

(我为未列出的数据库道歉。这不是我的想法。)

如果数据库支持此功能,则可能使用这三种方法之一。您始终可以使用多个语句使用事务来获得类似的效果。


推荐阅读