程序大概代码。
sql语句
首先调试程序,等程序断下来之后,在浏览器重新发起一次请求,模拟双线程。这时调试窗口有线程(ps:这里用到的是mysql自带的连接池)
事务开始但还没更新该记录时,该行还未被锁定,这是还可以更新
这时6号线程下一步就执行更新操作了
6号线程执行完之后,由于事务ID为14的记录被锁定,可以看到已经不能修改了,在排队等待事务关闭,如果等待过久直接取消这次操作
这时8号线程也在执行更新ID为14的操作,但是由于上一个事务未关闭,导致被锁,在排队等待。
可以看到mysql取消操作了。
已经异常了,而且连接已经关闭了
这时手动释放事务,由于是连接池,调用Close()并不是真正关闭连接只是放回连接池。所以要释放事务,不然下次获得该连接时会出错。而且还会导致死锁。
最后,总结并行事务第一个事务会锁住更新的记录,下一个事务操作该记录时排队等待上一个事务释放锁。并且上一个事务提交之后,下一个事务的回滚不会影响到上一个事务的操作。
原文:http://www.cnblogs.com/tpfOfBlog/p/6238009.html