当我有两张表:商品表、商品评论表。后台需要看到该商品有多少条评论时,我是去根据商品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;
这样只要以后更新数据时,在并发的情况下,后执行的事务就会被堵塞,直到当前事务执行完成。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 给自己本科IT专业毕业的妹m找个实习工作
- ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
- ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
- ¥50 mac mini外接显示器 画质字体模糊
- ¥15 TLS1.2协议通信解密
- ¥40 图书信息管理系统程序编写
- ¥20 Qcustomplot缩小曲线形状问题
- ¥15 企业资源规划ERP沙盘模拟
- ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
- ¥15 前端echarts坐标轴问题