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

MariaDB插入重复数据时如何递增计数器?

解决方案:用MariaDB原生的INSERT...ON DUPLICATE KEY UPDATE语法

完全不需要存储过程,MariaDB本身就支持你想要的功能,你的虚构语法几乎是对的,只需要做一点小调整:

首先确保你的表有正确的主键约束——必须把精确到秒的时间字段和a、b、c字段组合成复合主键,这样同一秒内的相同a/b/c数据才会触发主键冲突。比如建表语句可以是:

CREATE TABLE T (
    a INT,
    b VARCHAR(50),
    c TEXT,
    time_col DATETIME, -- 存储秒级时间的字段
    counter INT DEFAULT 0,
    PRIMARY KEY (time_col, a, b, c) -- 复合主键,唯一标识同一秒的同一条数据
);

然后用下面的SQL语句写入数据即可:

INSERT INTO T (a, b, c, time_col, counter)
VALUES (?, ?, ?, ?, 1) -- 第四个参数是你要插入的秒级时间,比如指定的时间值或NOW()
ON DUPLICATE KEY UPDATE counter = counter + 1;

原理说明

  • 当插入的行不存在(无相同时间+相同a/b/c的记录),会直接插入这条数据,counter被设为1;
  • 当插入的行触发主键冲突(同一秒、相同a/b/c的数据已存在),就会执行后面的UPDATE操作,把已有记录的counter值加1。

如果你的时间字段用当前系统时间,也可以直接用NOW()代替参数,比如:

INSERT INTO T (a, b, c, time_col, counter)
VALUES (?, ?, ?, NOW(), 1)
ON DUPLICATE KEY UPDATE counter = counter + 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:52:43