悲观锁与乐观锁是我们在数据库编程时常常遇到的两个概念,现在凭我的理解解释下!(oracle为例)
字面解释:
所谓悲观锁是指,在使用更改数据之前认为数据有可能已经被修改,所以首先对要更新的数据行进行锁定。
所谓乐观锁是指,在使用更改数据之前认为数据没有更改。
一般形式:
select for update nowait --锁定查询行一般用于悲观锁
update set --oracle中的更新本身就具有锁的既能
举例:
更新emp表MILLER的名字和工资。
使用悲观锁实现:
select empno, ename, sal from emp where empno = :empno
and ename = :ename and sal = :sal for update nowait;
update emp set ename = :ename, sal = :sal where empno = :empno;
commit;
加锁后可能有以下几种情况发生:
- 基本数据没有更新,我们将获得Miller行,这一行将被锁定不能由其他人更新。
- 如果正巧另外一个人正在修个这条数据的过程当中,我们将获得"ORA-00054资源忙"的错误。我们被阻塞必须等待该用户完成工作并释放锁资源才能够再次利用。
- 在选择数据和指定更新意图的时间里,一个人已经更改了哪一行,那么我们将获得零行!
分享到:
相关推荐
Hibernate高级特性,悲观锁与乐观锁的应用和区别,及两者之间的区别。
很好的描述Hibernate的悲观锁和乐观锁,
本文实例讲述了mysql 悲观锁与乐观锁。分享给大家供大家参考,具体如下: 悲观锁与乐观锁是人们定义出来的概念,你可以理解为一种思想,是处理并发资源的常用手段。 不要把他们与mysql中提供的锁机制(表锁,行锁,...
在关系型数据库中,悲观锁与乐观锁是解决资源并发场景的解决方案,接下来将详细讲解:magnifying_glass_tilted_right:一下这两个并发解决方案的实际使用及优缺点。 首先定义一下数据库,做一个最简单的库存表,如下...
介绍数据库事务的定义和事务带来的问题,详细讲解乐观锁与悲观锁的区别
主要介绍了thinkPHP框架乐观锁和悲观锁,结合实例形式分析了框架乐观锁和悲观锁的原理及thinkPHP相关实现技巧,需要的朋友可以参考下
Java 中的悲观锁和乐观锁的实现 纯开发技巧。
Hibernate的乐观锁与悲观锁的文档,帮助学习Hibernate的乐观锁与悲观锁,让你们学得更轻松。
并发控制—悲观锁和乐观锁
面试必备之乐观锁与悲观锁.pdf
[数据库事务与锁]详解七 深入理解乐观锁与悲观锁
详细介绍了Oracle中乐观锁、悲观锁的原理及应用,并有实例
NULL 博文链接:https://cdxs2.iteye.com/blog/1938245
悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部 系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状 态。悲观锁的实现,往往依靠数据库提供的锁机制...
Hibernate乐观锁和悲观锁分析,针对在使用HIBERNATE时怎么配置乐观锁进行了详细的范例讲解
NULL 博文链接:https://12345678.iteye.com/blog/721836
所谓悲观锁,总是假设最坏的情况,每次去拿数据的时候都会认为别人会修改数据,造成幻读,不可重复读,脏读等情况发生。所谓乐观锁,重视假设最好的情况,每次去拿数据都认为别人不会修改,所以不会上锁,但是会在...
Hibernate锁机制_悲观锁和乐观锁