sql - 是否有任何可以在一个语句中更新或插入的 RDBMS?
问题描述
如果我有这样的表:
ID FirstName LastName Address
-- --------- -------- -------
我想在存在 ID 时更新信息,或者在 ID 不存在时插入新行。
这可以在一个语句中完成,还是我必须检查 ID 的存在,然后插入或更新?
解决方案
是的。想到了三种方法:
merge
是最常用的方法。SQL Server、Oracle、DB2 和 Teradata 支持这一点。请参阅相应的文档。请注意,确切的merge
语法可能因数据库而异。
on duplicate key update
是 MySQL 和 MariaDB(旧版本)使用的一种方法。请参阅相应的文档。
Postgres 和 SQLite 支持通过语句on conflict
中的子句解决冲突insert
。也就是说,许多数据库都基于旧版本的 Postgres,因此并非所有派生数据库都支持on conflict
.
(我为未列出的数据库道歉。这不是我的想法。)
如果数据库支持此功能,则可能使用这三种方法之一。您始终可以使用多个语句使用事务来获得类似的效果。
推荐阅读
- android - 如何在flutter中写入json文件?下面的代码有什么问题?
- php - 用 PHP 从今天和昨天读取文件
- android - 为什么我的 DialogFragment 在 Android 11 中没有全屏显示?
- python - 如何输入字符串或句子并从字典中输出相应的值
- django-tables2 - 当我在一个视图中设置表标题时,我有三个表视图都是 django-table2,每个视图都会更改它
- apache-kafka - Kafka Ktable-Ktable 通过自定义序列化程序加入 3 个 Ktables
- hibernate - JPA - hibernate.use_identifier_rollback 抛出 NullPointerException
- python - 如何获得与 Selenium Python 的链接?
- python - 从 TensorFlow 2.x 中的特定层中删除层/提取特征
- react-native - 调度操作有效,但商店未更新