来源:自学PHP网 时间:2020-09-24 09:59 作者:小飞侠 阅读:次
[导读] Mysql事务并发问题解决方案...
今天带来Mysql事务并发问题解决方案教程详解
在开发中遇到过这样一个问题 一个看视频记录,更新到100就表示看完了,后面再有请求不继续更新了. 结果是: 导致,里面很多数据出现问题. 推测是以下的情况才会导致 第一条请求 事务在执行中,还未提交(因为本地有时候比较难再现,于是手动在程序中,第一条记录处理的时候,sleep了几秒,就达到这种效果了) 第二条请求 事务已经开始执行,这个时候查到的历史最大值不是100,才会去进行了更新 网上看了一下解决方案: 悲观锁 直接锁行记录 这个我在本地测试,确实有效,一个事务开始没结束,第二个事务一个等待,不过会导致处于阻塞状态,因为系统并发,不敢考虑,也就是记录下这个方式. 手动模拟: 执行第一个事务: -- 视频100BEGIN; SELECT * FROM `biz_coursestudyhistory` WHERE sid = 5777166; UPDATE biz_coursestudyhistory set studyStatus = 100,versionNO=versionNO+1 WHERE sid = 1 AND versionNO = 0; -- commit ; 先不执行,先注解掉,只执行上面的 接着执行第二个事务: BEGIN; UPDATE biz_coursestudyhistory set studyStatus = 90,versionNO=versionNO+1 WHERE sid = 1 AND versionNO = 0; SELECT * FROM `biz_coursestudyhistory` WHERE sid = 1 FOR UPDATE; COMMIT; 会发现成功不了,一直处于等待状态. 查看锁 Mysql索引性能优化问题解决方案 最新评论添加评论更多文章推荐
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习 京ICP备14009008号-1@版权所有www.zixuephp.com 网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com
添加评论 |