MTYSQL中实现功能:如果没有这条记录就插入,有的话就把 nums 加 1@Update("INSERT INTO logs (id, kong, date, nums) " +
"VALUES (#{id}, #{kong}, #{date}, 1) " +
"ON DUPLICATE KEY UPDATE nums = nums + 1")
- INSERT INTO logs (id, kong, date, nums) VALUES (#{id}, #{kong}, #{date}, 1)
- 尝试往 mgrlogs 表插入一行:
- id 列 = 参数 #{id}
- kong 列 = 参数 #{kong}
- date 列 = 参数 #{date}(通常是当天日期)
- nums 列 = 1(第一次出现时计数为 1)
- ON DUPLICATE KEY
- 前提:表上存在唯一键或主键约束,例如 (id, kong, date) 建了 UNIQUE KEY。
- 当插入的 (id, kong, date) 和表中已有行的唯一键冲突时,不会报错,而是执行后面的 UPDATE 子句。
- UPDATE nums = nums + 1
- 对那条“冲突的已有行”执行更新,把原来的 nums 加 1。
综合起来,这条 SQL 实现了一个“幂等自增”逻辑: - 第一次调用(当天还没有这条 (id, kong, date) 记录):插入一条记录,nums = 1。
- 后续再调用同样的 (id, kong, date):不会插入新行,而是把那一行的 nums 变成 nums + 1。
正好对应你要的功能:按 (id, kong, date) 维度统计次数,当天没有就插一条,已有就次数 +1。
|