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
相关产品推荐
相关产品推荐

