`

Oracle乐观锁悲观锁

 
阅读更多

1.乐观锁

当处理对象状态时为了防止冲突

例:一个下订单的状态status

a.更新status为1购买,b取得status为1,这时a要退货把status改为2.

   这时如果b还按1的状态去处理,发货了。就出错了。

 

正确的做法为:

    当b发货时,为了处理并发脏读,需要先根据原status状态去更新status为3订单处理中

   int res = update status = 3 from order  r where r.status = 1 and r.orderId = xx

   当res更新到状态大于0时,就可以发货,发货完了,再修改status为4已发货。

   当res等于0时说明a已经修改订单状态。

 

而a要修改状态为2退货时

    int res = update status = 2 from order  r where r.status = 1 and r.orderId = xx

如果更新结果res小于0,说明b已修改状态已进行发货处理,不能执行退货。

 

这个处理并发脏读的方式就是乐观锁。

 

2.悲观锁

oracle悲观锁分为等待for update,不等待for update nowait

 

等待型

select * from order r  where r.orderId = xx   for update;

一个执行没有commit时另一个只能等待。

 

不等待型

select * from order r  where r.orderId = xx   for update nowait;

一个执行没有commit时另一个直接报异常。

 

select * from order r  where r.orderId = xx   for update nowait  t;

一个执行没有commit时另一个等待t秒报异常。

 

 

分享到:
评论

相关推荐

    Hibernate乐观锁和悲观锁分析

    Hibernate支持的悲观锁模式有`LockMode.UPGRADE`(对应SQL的`for update`)和`LockMode.UPGRADE_NOWAIT`(Oracle特有的,用于立即返回等待超时的结果)。 **乐观锁(Optimistic Locking)** 乐观锁则相对乐观,它...

    Hibernate的乐观锁与悲观锁

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

    hibernate乐观锁和悲观锁学习

    本文主要讨论的是Hibernate框架中两种锁机制的使用:乐观锁和悲观锁。 首先,让我们深入理解悲观锁(Pessimistic Locking)。悲观锁正如其名字所示,假设并发环境中数据会被频繁修改,所以在整个数据处理过程中,它...

    hibernate的乐观锁和悲观锁

    ### Hibernate的乐观锁和悲观锁 #### 一、引言 在软件开发中,尤其是在涉及大量并发操作的应用场景下,确保数据的一致性和完整性是非常重要的。对于基于Java Web的应用而言,Hibernate作为一款流行的ORM框架,提供...

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

    ### Java中的悲观锁与乐观锁实现详解 #### 一、悲观锁(Pessimistic Locking) 悲观锁是一种基于对数据安全性的保守态度而设计的锁机制。它假设数据在处理过程中很可能被外界修改,因此在整个数据处理过程中都会将...

    Oracle的锁机制

    根据锁定时间,锁可分为悲观锁和乐观锁。悲观锁假设数据操作会发生冲突,所以在读取数据时立即锁定,例如表级锁。乐观锁则在数据更新时检查冲突,如行级锁,这样可以提高并发性能。 根据保护的对象,Oracle的锁分为...

    java调用Oracle的锁表命令

    - 考虑使用乐观锁或悲观锁策略,根据应用的并发需求选择合适的方式。 通过以上步骤,你可以在Java程序中安全有效地调用Oracle的锁表命令,确保数据一致性并优化并发性能。对于更复杂的应用场景,如分布式事务,...

    SQL数据库系统原理(二)———乐观锁与悲观锁、MVCC、范式理论、SQL和NoSQL比较

    在数据库系统中,为了保证数据的一致性和完整性,有多种并发控制策略,其中包括乐观锁和悲观锁。这两种锁机制主要用于解决事务在并发环境中的数据冲突问题。 乐观锁是一种假设事务在执行过程中不会发生冲突的策略。...

    在分布式事务中实现基于Oracle PLSQL UL LOCK的悲观离线锁

    Oracle中的用户级(UL)锁就是一种悲观锁,它允许用户自定义锁机制,提供更细粒度的控制。 PL/SQL UL LOCK的实现通常涉及以下几个步骤: 1. **创建锁表**:首先,你需要创建一个表来存储锁定信息。这个表通常包含...

    查看Oracle锁表

    3. **并发控制机制**:如乐观锁和悲观锁等技术。 4. **定期检查锁定情况**:定期执行上述SQL查询,及时发现并解决锁定问题。 #### 五、总结 在Oracle数据库中,了解和掌握锁定机制对于确保数据完整性和提高系统...

    Hibernate实现悲观锁和乐观锁代码介绍

    Hibernate 实现悲观锁和乐观锁代码介绍 Hibernate 是一个基于 Java 的持久层框架,它提供了多种锁机制来实现事务的隔离性和一致性。在本文中,我们将详细介绍 Hibernate 实现悲观锁和乐观锁的代码实现,并讨论 ...

    oracle锁表处理

    - **并发控制**:使用Oracle提供的并发控制机制,如乐观锁或悲观锁。 通过以上方法,可以有效地分析并处理Oracle中的锁争用问题,提高系统的性能和稳定性。需要注意的是,在实际操作中应当谨慎处理锁争用问题,...

    oracle 锁及并发性

    悲观锁和乐观锁是两种不同的并发控制策略。 - **悲观锁**:假设数据会发生冲突,因此在事务开始时即锁定数据,直到事务结束。这种方式虽然能有效避免冲突,但可能导致资源占用时间较长。 - **乐观锁**:假设数据...

    Oracle表死锁与解锁

    - 在编程时,对可能出现死锁的操作进行预测和处理,例如使用事务的乐观锁或悲观锁策略。 通过理解Oracle表死锁的原理、使用上述检测和解决方法,以及遵循最佳实践,可以有效地管理和防止数据库死锁,保证系统的稳定...

    Optimistic Locking with Concurrency in Oracle

    FOR UPDATE NOWAIT`语句:虽然这通常被认为是悲观锁的一种形式,但在某些情况下,可以结合乐观锁策略使用。当读取数据时,使用此语句但不立即锁定,而是等到更新时再检查是否有冲突。如果在更新时发现数据已被其他...

    oracle 锁

    - **乐观锁**:假设很少发生冲突,因此在提交事务时检查是否有冲突,如版本控制或时间戳。 - **悲观锁**:在访问数据时立即锁定,防止其他用户修改,适合高冲突环境。 4. **锁定级别**: - **多粒度锁定...

    oracle锁讲解笔记

    ### Oracle锁机制详解 #### 锁的基本概念与作用 锁机制是Oracle数据库中用于管理并发访问共享资源的关键组件。在多用户环境中,确保数据的一致性和完整性至关重要,尤其是在多个会话试图同时修改相同数据的情况下...

    oracle表解锁

    - 在设计应用程序时,考虑使用乐观锁或悲观锁策略,以减少锁定冲突。 - 正确地管理和控制事务,确保它们能尽快完成,减少锁定时间。 - 定期检查并清理长时间运行的事务。 总结来说,Oracle表的解锁是一个涉及...

Global site tag (gtag.js) - Google Analytics