You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

INSERT ON DUPLICATE KEY UPDATE如何实现重复键时值累加

需求实现说明

这个需求完全可以实现,首先要满足前置条件:必须给name字段设置主键或者唯一约束,否则数据库无法识别重复记录,冲突更新逻辑不会触发。如果还没加约束,先执行对应语句创建:

-- 把table替换成你的实际表名
ALTER TABLE `table` ADD UNIQUE KEY `uk_name` (`name`);

不同数据库的upsert语法略有区别,对应正确写法如下:

  • MySQL / MariaDB
    使用ON DUPLICATE KEY UPDATE语法实现,VALUES(val)会取到本次尝试插入的新y值:
INSERT INTO `table` (name, val)
VALUES (x, y) -- 替换为你实际要插入的x、y值
ON DUPLICATE KEY UPDATE val = val + VALUES(val);

按照你给出的现有数据举例:如果执行INSERT INTO table (name, val) VALUES ('John',2),因为John已存在,最终John对应的val会更新为1+2=3;如果插入不存在的name比如('Bob',4),会正常插入新记录,val值为4。

  • PostgreSQL
    使用ON CONFLICT语法实现,EXCLUDED.val指代本次插入的新y值:
INSERT INTO "table" (name, val)
VALUES (x, y)
ON CONFLICT (name)
DO UPDATE SET val = "table".val + EXCLUDED.val;
  • SQLite
    语法和PostgreSQL基本一致,关键字大小写不做强制要求:
INSERT INTO `table` (name, val)
VALUES (x, y)
ON CONFLICT(name) DO UPDATE SET val = val + excluded.val;

踩坑提醒:不要把更新逻辑写成val = y,这样会直接覆盖原有值,无法实现累加效果;也不要写错新值的引用关键字,会导致SQL执行报错。

内容的提问来源于stack exchange,提问作者maxy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:57:20