天青色的骑士 2021-06-13 17:30 采纳率: 80%
浏览 34
已采纳

mysql 对某一个数据进行统计

当我有两张表:商品表、商品评论表。后台需要看到该商品有多少条评论时,我是去根据商品id在商品评论表里统计或者在商品表里添加一个Comment_number字段,每当用户评论的时候在原来的基础上+1,这两种方式去统计。第一种方式如果商品评论表数据非常大的情况下耗时就会增加,第二种方式如果两个用户同时填写了评论,那这个Comment_number值就少增加一次。我想问问第二种方式如果遇到这种情况要怎么处理。

  • 写回答

2条回答 默认 最新

  • bm1998 2021-06-13 17:58
    关注
    UPDATE goods SET Comment_number = Comment_number + 1 WHERE id=1;

    其实这是两步操作:

    a = SELECT * FROM goods WHERE id=1;
    UPDATE goods SET num = a.Comment_number + 1 WHERE id=1;

    其中执行SELECT语句时没有加锁,只有在执行UPDATE时才进行加锁的。

    而针对这个问题,可以通过事务显式的对 SELECT 进行加锁:

    SET AUTOCOMMIT=0; 
    BEGIN WORK; 
     a = SELECT num FROM goods WHERE id=2 FOR UPDATE; 
     UPDATE goods SET num = a.Comment_number + 1 WHERE id=2; 
    COMMIT WORK;

    这样只要以后更新数据时,在并发的情况下,后执行的事务就会被堵塞,直到当前事务执行完成。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题