首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SQL 防重复插入:MySQL 与 PostgreSQL 的 Upsert 对照

SQL 防重复插入:MySQL 与 PostgreSQL 的 Upsert 对照

作者头像
安全风信子
发布2025-11-18 19:15:48
发布2025-11-18 19:15:48
10
举报
文章被收录于专栏:AI SPPECHAI SPPECH

一句话承诺:一张对照表 + 两段语法,让你快速写出“有则更新,无则插入”。

语法对照表

数据库

语法

示例

MySQL

INSERT … ON DUPLICATE KEY UPDATE

依据唯一索引

PostgreSQL

INSERT … ON CONFLICT (…) DO UPDATE

指定冲突目标


MySQL 示例

代码语言:javascript
复制
CREATE TABLE users (
  id BIGINT PRIMARY KEY,
  email VARCHAR(255) UNIQUE,
  name VARCHAR(64)
);

INSERT INTO users (id, email, name)
VALUES (1, 'a@ex.com', 'Alice')
ON DUPLICATE KEY UPDATE name=VALUES(name);

PostgreSQL 示例

代码语言:javascript
复制
CREATE TABLE users (
  id BIGINT PRIMARY KEY,
  email TEXT UNIQUE,
  name TEXT
);

INSERT INTO users (id, email, name)
VALUES (1, 'a@ex.com', 'Alice')
ON CONFLICT (email) DO UPDATE SET name=EXCLUDED.name;

少量解释

  • 选对冲突列:通常使用唯一索引列(如 email)。
  • PG 的 EXCLUDED 引用待插入行;MySQL 的 VALUES(…) 引用插入值。

常见坑与替代法

  • 坑:更新字段遗漏导致部分数据旧值保留。替代:明确列清单。
  • 坑:并发高导致锁冲突。替代:必要时改为批量或队列处理。

下一篇预告

MongoDB 索引速查:TTL 与唯一索引的最小用法(命令+表)。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 语法对照表
  • MySQL 示例
  • PostgreSQL 示例
  • 少量解释
  • 常见坑与替代法
  • 下一篇预告
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档