网站首页 > 教程文章 正文
1、什么是SQL当中的Upsert操作
UPSERT 操作是一种在数据库中执行插入和更新操作的方式,根据指定的条件执行插入操作或更新已存在的行。不同的数据库管理系统可能有不同的 UPSERT 实现方式。
在传统的 SQL 中,通常使用两个操作(INSERT 和 UPDATE)来实现 UPSERT:
插入操作:尝试插入新的行,如果插入的行违反了唯一约束或主键的约束,则会引发错误。
更新操作:如果插入操作引发了唯一约束或主键的错误,则执行更新操作。
然而,一些现代的数据库管理系统提供了更简化的 UPSERT 语法。以下是几个常见的 UPSERT 语法示例:
2、PG Upsert操作
PostgreSQL 和 MySQL 使用 INSERT ... ON DUPLICATE KEY UPDATE 语法来执行 UPSERT 操作:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON DUPLICATE KEY UPDATE column1=new_value1, column2=new_value2, ...;
这将尝试插入一行新数据,如果存在冲突将执行更新操作。
3、SQLite Upsert
SQLite 使用 INSERT INTO ... VALUES ... ON CONFLICT(column) DO UPDATE SET column=new_value 语法来执行 UPSERT 操作:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON CONFLICT (column)
DO UPDATE SET column1=new_value1, column2=new_value2, ...;
这将尝试插入一行新数据,如果存在冲突将执行更新操作。
4、Oracle Upsert
Oracle 使用 MERGE INTO ... USING ... ON ... WHEN MATCHED THEN UPDATE ... WHEN NOT MATCHED THEN INSERT ... 语法来执行 UPSERT 操作:
MERGE INTO table_name
USING (SELECT value1, value2, ... FROM dual) d
ON (condition)
WHEN MATCHED THEN
UPDATE SET column1=new_value1, column2=new_value2, ...
WHEN NOT MATCHED THEN
INSERT (column1, column2, ...) VALUES (value1, value2, ...);
这将尝试执行合并操作,根据给定的条件判断是否应该执行更新或插入UPSERT(合并操作)是一种在关系型数据库中用于插入或更新记录的操作。它的目的是在执行插入操作时,如果记录已经存在,则更新该记录;如果记录不存在,则插入新的记录。
5、MySQL or MariaDB Upsert
MySQL 和 MariaDB 支持使用 INSERT ... ON DUPLICATE KEY UPDATE 语句进行 UPSERT 操作:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON DUPLICATE KEY UPDATE column1=new_value1, column2=new_value2, ...;
- 上一篇: SQL查询语句大全(一) sql查询语句命令大全
- 下一篇: SQL轻松入门(1):增删改与简单查询
猜你喜欢
- 2024-12-28 《黑屏死机》 电脑黑屏死机
- 2024-12-28 SQL轻松入门(1):增删改与简单查询
- 2024-12-28 SQL查询语句大全(一) sql查询语句命令大全
- 2024-12-28 大数据开发基础之SQL语句基本操作
- 2024-12-28 SQL CASE WHEN的用法 sql case when 的用法详解
- 2024-12-28 高并发下如何防重? 如何防止高并发
- 2024-12-28 最全汇总|SQL Server与Access数据库sql语法差异
- 2024-12-28 SQL left join 左表合并去重技巧总结
- 2024-12-28 为什么一条UPDATE语句有索引反而更慢
- 2024-12-28 SQL的基本语法和语句分类 sql的基本语法和语句分类有哪些
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)