您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2024/10/22 3:11:41发布29次查看
几个线程同时进行事务并发的问题。。
几个线程同时进行事务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好用。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product