MySQL 8 SELECT查询时自动递增count字段值的实现方法咨询
MySQL 8 查询字段同时自动累加解决方案
你猜测用索引实现的思路不适用:索引是用于提升查询检索效率的结构,不具备数据修改能力,无法实现查询时自动更新字段的需求。你要的效果可以通过以下两种方案实现,全程原子操作无并发风险。
原始表结构
| id | name | count |
|---|---|---|
| 1 | name1 | 3 |
| 2 | name2 | 4 |
方案1:MySQL 8.0.20及以上版本(推荐)
MySQL 8.0.20版本开始支持UPDATE ... RETURNING语法,可以在更新数据的同时直接返回指定字段的值,一条语句即可完成需求:
UPDATE `table` SET `count` = `count` + 1 WHERE id = 1 RETURNING `count`;
首次执行该语句返回值为3,同时表中id=1的count字段自动更新为4,完全符合你的预期。
方案2:低版本MySQL兼容方案
如果你使用的MySQL版本低于8.0.20,不支持RETURNING语法,可以借助用户变量实现:
-- 执行更新的同时将旧值存入临时变量 UPDATE `table` SET `count` = (@old_count := `count`) + 1 WHERE id = 1; -- 查询临时变量得到更新前的count值 SELECT @old_count AS `count`;
注意事项
- 不要使用「先SELECT查旧值,再UPDATE更新」的写法,高并发场景下会出现竞态问题,导致count计数不准确。
table和count都是MySQL的保留关键字,作为表名和字段名使用时需要用反引号包裹,避免触发语法错误。
内容的提问来源于stack exchange,提问作者Lenny4
相关产品推荐
相关产品推荐

