首页 > 其他 > 详细

并行事务同时更新同一条记录

时间:2016-12-30 20:26:49      阅读:660      评论:0      收藏:0      [点我收藏+]

程序大概代码。

技术分享

sql语句技术分享

 

技术分享

 

首先调试程序,等程序断下来之后,在浏览器重新发起一次请求,模拟双线程。这时调试窗口有线程(ps:这里用到的是mysql自带的连接池)技术分享

 事务开始但还没更新该记录时,该行还未被锁定,这是还可以更新

技术分享

这时6号线程下一步就执行更新操作了

技术分享

6号线程执行完之后,由于事务ID为14的记录被锁定,可以看到已经不能修改了,在排队等待事务关闭,如果等待过久直接取消这次操作

技术分享

这时8号线程也在执行更新ID为14的操作,但是由于上一个事务未关闭,导致被锁,在排队等待。

技术分享

可以看到mysql取消操作了。

技术分享

已经异常了,而且连接已经关闭了

技术分享

这时手动释放事务,由于是连接池,调用Close()并不是真正关闭连接只是放回连接池。所以要释放事务,不然下次获得该连接时会出错。而且还会导致死锁。

技术分享

最后,总结并行事务第一个事务会锁住更新的记录,下一个事务操作该记录时排队等待上一个事务释放锁。并且上一个事务提交之后,下一个事务的回滚不会影响到上一个事务的操作。

并行事务同时更新同一条记录

原文:http://www.cnblogs.com/tpfOfBlog/p/6238009.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!