`

悲观锁与乐观锁

阅读更多

悲观锁与乐观锁是我们在数据库编程时常常遇到的两个概念,现在凭我的理解解释下!(oracle为例)

字面解释:

所谓悲观锁是指,在使用更改数据之前认为数据有可能已经被修改,所以首先对要更新的数据行进行锁定。

所谓乐观锁是指,在使用更改数据之前认为数据没有更改。

一般形式:

select for update nowait --锁定查询行一般用于悲观锁

update set                    --oracle中的更新本身就具有锁的既能

举例:

更新emp表MILLER的名字和工资。

使用悲观锁实现:

  • 查询到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;

 加锁后可能有以下几种情况发生:

  1. 基本数据没有更新,我们将获得Miller行,这一行将被锁定不能由其他人更新。
  2. 如果正巧另外一个人正在修个这条数据的过程当中,我们将获得"ORA-00054资源忙"的错误。我们被阻塞必须等待该用户完成工作并释放锁资源才能够再次利用。
  3. 在选择数据和指定更新意图的时间里,一个人已经更改了哪一行,那么我们将获得零行!
分享到:
评论

相关推荐

    Hibernate悲观锁与乐观锁

    《Hibernate 悲观锁与乐观锁详解》 在多用户并发访问的环境中,数据库管理系统必须具备有效的数据访问控制机制,以确保数据的一致性和完整性。Hibernate,作为一款流行的Java持久化框架,提供了两种主要的锁定策略...

    Hibernate悲观锁与乐观锁案例

    在Java的持久化框架Hibernate中,悲观锁和乐观锁是两种重要的并发控制策略,它们用于管理数据库中的数据在多线程环境下的访问安全。本文将深入探讨这两种锁机制的原理、应用场景及其区别。 首先,我们来理解悲观锁...

    Java 中的悲观锁和乐观锁的实现

    乐观锁与悲观锁相反,它假定数据不太可能被其他线程或进程修改,因此不会一开始就锁定数据。这种锁机制通常不会直接使用数据库级别的锁定机制,而是通过版本号或其他标记来检测数据是否已被其他事务修改。 **1. ...

    面试必备之乐观锁与悲观锁.pdf

    ### 面试必备之乐观锁与悲观锁详解 #### 一、悲观锁与乐观锁的概念 悲观锁和乐观锁是计算机科学中用于处理并发控制的两种不同策略,它们主要应用于多线程环境下数据的一致性和完整性保护。两种锁的设计哲学反映了...

    mysql 悲观锁与乐观锁的理解及应用分析

    本文实例讲述了mysql 悲观锁与乐观锁。分享给大家供大家参考,具体如下: 悲观锁与乐观锁是人们定义出来的概念,你可以理解为一种思想,是处理并发资源的常用手段。 不要把他们与mysql中提供的锁机制(表锁,行锁,...

    MySQL中的悲观锁与乐观锁

    在关系型数据库中,悲观锁与乐观锁是解决资源并发场景的解决方案,接下来将详细讲解:magnifying_glass_tilted_right:一下这两个并发解决方案的实际使用及优缺点。 首先定义一下数据库,做一个最简单的库存表,如下...

    thinkPHP框架乐观锁和悲观锁实例分析

    除了上述的乐观锁和悲观锁实现技巧之外,ThinkPHP框架还提供了其他很多与数据操作和事务管理相关的功能和技巧。例如,在ThinkPHP中,可以使用事务控制相关的类和方法,如mysqli的transaction方法开始事务,commit...

    数据库事务、hibernate悲观锁和乐观锁

    在处理并发问题时,Hibernate提供了悲观锁和乐观锁两种机制。 悲观锁假设并发环境中的冲突是常态,因此在读取数据时就立即锁定,直到事务结束才释放。在Hibernate中,可以通过设置`@LockModeType.PESSIMISTIC_READ`...

    Hibernate悲观锁和乐观锁的实现

    悲观锁和乐观锁是两种常见的锁定策略,它们各有特点,适用于不同的场景。 **悲观锁**(Pessimistic Lock)的名字来源于其悲观的态度,它认为数据随时可能被其他事务修改,因此在读取数据时就立即进行加锁,防止其他...

    乐观锁与悲观锁

    介绍数据库事务的定义和事务带来的问题,详细讲解乐观锁与悲观锁的区别

    Hibernate的乐观锁与悲观锁

    ### Hibernate的乐观锁与悲观锁 #### 一、引言 在并发环境下,尤其是在金融、电商等业务场景中,确保数据的一致性和完整性至关重要。**Hibernate**作为一种流行的Java持久层框架,提供了多种机制来处理并发控制...

    并发控制—悲观锁和乐观锁

    并发控制—悲观锁和乐观锁

    Hibernate锁机制_悲观锁和乐观锁

    Hibernate 锁机制_悲观锁和乐观锁 Hibernate 锁机制是指在数据库访问中,为了维护数据的一致性和正确性,所采取的一些机制来防止数据的并发访问和修改。 Hibernate 中有两种锁机制:悲观锁和乐观锁。 一、悲观锁...

    Hibernate乐观锁和悲观锁分析

    【Hibernate乐观锁与悲观锁详解】 在开发过程中,尤其是在并发环境下,确保数据的一致性和完整性至关重要。Hibernate,作为Java领域广泛使用的ORM框架,提供了一种处理并发数据访问冲突的手段,那就是锁机制。主要...

    悲观锁和乐观锁的技术对比和应用.docx

    悲观锁和乐观锁是两种常见的并发控制策略,用于在多任务环境下确保数据一致性。它们各自有不同的工作原理和适用场景。 悲观锁(Pessimistic Lock)正如其名,它假设并发环境中会发生频繁的冲突,因此在读取数据时就...

    面试必备之乐观锁与悲观锁

    【标题】:“面试必备之乐观锁与悲观锁” 【描述】:“面试必备之乐观锁与悲观锁.pdf”涉及的是并发控制中的两种重要锁机制——悲观锁和乐观锁,它们是多线程环境下确保数据一致性的重要手段。 【标签】:“求职...

Global site tag (gtag.js) - Google Analytics