行锁模式以及加锁方法:
共享锁:X锁
lock in share mode:共享锁(x锁):多个事务都可以获得同一把锁,但是只能读取不能修改。
开启两个事务,set autocommit=0的含义是设置当前session禁止自动提交,需要显示commit才可以提交。详见:https://www.cnblogs.com/langtianya/p/4777662.html。
表结构(自己去建表啊...):
首先对sessionA添加lock in share mod,
这时共享锁就已经添加上了,sessionB仍然可以查询记录并且可以添加lock in share mode
SessionA对当前Session进行update修改数据时就会进入死锁状态(看当前语句已经没有反应了并且右下角的查询时间在一直增加)
在SessionB中对锁住的这行记录进行修改时就可以解除死锁状态,SessionB中输出DeadlockFound....
此时SessionA就获得锁可进行更新操作了。。。,再次执行SessionA中的update语句发现可以进行更新了
最后SessionA进行commit提交就会发现数据库已经成功修改了
排他锁(X):一个事务获取了数据行的排他锁,其他事务就不能再获取该数据行的共享锁和排他锁,但是获取到排他锁的数据可以对数据进行修改和读取。
开启了事务A事务B,事务B对数据行加了排他锁,事务A可以查询出数据。
事务A对数据行也加了排他锁,此时事务A就会进入等待状态,陷入死锁
事务B可以对数据行进行修改,提交commit后更改数据,此时释放排他锁。
事务A可以查询出更改后的数据
参考了两篇写的很好的博客: