登录  /  注册
几个线程同时进行事务并发的有关问题。
php中文网
发布: 2016-06-13 13:23:14
原创
641人浏览过

几个线程同时进行事务并发的问题。。

几个线程同时进行事务A。。

如果事务A里面有一个步骤1:是对某一个表某条固定记录进行更新操作的。。

问题1:那是不是表行会被锁住,线程之间后一个必须等前一个提交事务才继续(“运行”还是“提交事务”)?

事务A有一个步骤2:是对某个表进行INSERT记录的;
事务A提交前还有一个步骤3:是比较步骤2的数据,如果出现INSERT的记录超过要求,就回滚。。

问题2:如果问题1的答案是提交事务,如果发生并发,步骤3这一步是不是没用了,检测不了?如果答案是运行,那可以防并发吗?

问题3:如果问题2解决不了,是不是一定要在步骤2 INSERT记录前进行这个表的SELECT FOR UPDATE进行行锁?这应该可以解决并发了吧,有没人其它办法呀。

希望有前辈指导一下,谢谢。。。





------解决方案--------------------
问题3:如果问题2解决不了,是不是一定要在步骤2 INSERT记录前进行这个表的SELECT FOR UPDATE进行行锁?这应该可以解决并发了吧,有没人其它办法呀。

上边都不说了,这个问题是关键。 一定要for update锁住,你完全可以认为for update就是lock加锁,只有这样才能保证原子性,否则一个这样的事务真心没法原子性:

1,查询A
2,A满足条件则更新A

如果1,2不是原子的,那么查询A和更新A中间会有其他操作修改A,怎么办?把1,2整体锁住就行了,for update是一种办法,尤其是innodb可以行锁,所以比直接lock table好用。

相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 技术文章
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2023 //m.sbmmt.com/ All Rights Reserved | 苏州跃动光标网络科技有限公司 | 苏ICP备2020058653号-1

 | 本站CDN由 数掘科技 提供

登录PHP中文网,和优秀的人一起学习!
全站2000+教程免费学