码迷,mamicode.com
首页 > 数据库 > 详细

MySQL数据库同步之悲观锁和乐观锁

时间:2017-09-07 10:57:59      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:乐观锁   hibernate   upd   事务处理   hiberna   提交   排他性   table   记录   

测试需要:本地开两个测试窗口

悲观锁

悲观锁它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。 
一个典型的倚赖数据库的悲观锁调用: 
select * from table where name=‘who am i‘ for update;
这条 sql 语句锁定了table表中所有符合检索条件( name=‘who am i‘ )的记录。本次事务提交之前(事务提交时会释放事务过程中的锁),外界无法修改这些记录。 Hibernate 的悲观锁,也是基于数据库的锁机制实现。

一个窗口开启一个事务但是不提交事务,执行select语句其中包含for update子语句

技术分享

另一窗口尝试更新表

技术分享

我们可以看到报错了内容是:锁等待超时超过;试着重新启动事务

 这个时候我们提交事务

技术分享

 再次尝试更新时更新成功了

技术分享

 

MySQL数据库同步之悲观锁和乐观锁

标签:乐观锁   hibernate   upd   事务处理   hiberna   提交   排他性   table   记录   

原文地址:http://www.cnblogs.com/BINGJJFLY/p/7488460.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!