当前位置:Gxlcms > 数据库问题 > MySQL数据库同步之悲观锁和乐观锁

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

时间:2021-07-01 10:21:17 帮助过:1人阅读

;
这条 sql 语句锁定了table表中所有符合检索条件( name=‘who am i‘ )的记录。本次事务提交之前(事务提交时会释放事务过程中的锁),外界无法修改这些记录。 Hibernate 的悲观锁,也是基于数据库的锁机制实现。

一个窗口开启一个事务但是不提交事务,执行select语句其中包含for update子语句。需要注意的是for update要放到mysql的事务中,即begin和commit中,否则不起作用。

技术图片

另一窗口尝试更新表

技术图片

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

 这个时候我们提交事务

技术图片

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

技术图片

 优点与不足

悲观并发控制实际上是“先取锁再访问”的保守策略,为数据处理的安全提供了保证。但是在效率方面,处理加锁的机制会让数据库产生额外的开销,还有增加产生死锁的机会;另外,在只读型事务处理中由于不会产生冲突,也没必要使用锁,这样做只能增加系统负载;还有会降低了并行性,一个事务如果锁定了某行数据,其他事务就必须等待该事务处理完才可以处理那行数

参考http://chenzhou123520.iteye.com/blog/1863407

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

标签:并发   负载   where   报错   过程   png   code   select   注意   

人气教程排行