`
fiwrc
  • 浏览: 23352 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Oracle中的select for update

 
阅读更多

通常情况下,select语句是不会对数据加锁,不会妨碍影响其他的DMLDDL操作。借助for update子句,我们可以在应用程序的层面手工实现数据加锁保护操作。当只允许一个session进行update的时候, for update十分有用.

select…for update之后,可以使用of子句选择对select的特定数据表进行加锁操作。默认情况下,不使用of子句表示在select所有的数据表中加锁。

 

select * from test for update; 会对table test进行加锁. 此时只允许当前的session对已经存在的数据进行更新. 但其它session仍可以进行insert的操作.

 

select * from Table1 a join Table2 b on a.pkid=b.pkid where a.pkid = 10 for update of a.pkid 只锁定Table1中满足条件的行, 这就是使用of子句的作用. 比较常用于多个表的操作.

 

 

加入for update之后,Oracle就要求启动一个新事务,尝试对数据进行加锁。如果当前已经被加锁,默认的行为必然是block等待。使用nowait子句的作用就是避免进行等待,当发现请求加锁资源被锁定未释放的时候,直接报错返回。如果不使用nowait或wait子句, 新的加锁请求会一直hang住, 直到原来的commit或rollback.

 

 

select * from test where a=2 for update nowait;
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

 

或者
select * from test where a=2 for update wait 3; 如果3秒内还是无法加锁则返回错误.

 

 

在一个session内可以多次进行select XX for update,然后只需要commit或rollback一次即可释放.

分享到:
评论

相关推荐

    数据库oracle for update of和for update的区别

    通过上述示例我们可以看出,在Oracle数据库中,`FOR UPDATE OF`提供了更细粒度的锁定控制能力,从而提高了系统的并发性能。在设计并发处理逻辑时,合理利用这些特性可以帮助提高系统的整体效率。

    oracle的update的五种方式

    标准 Update 语句是 Oracle 中最基本的更新语句,语法为:`UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值`。例如:`UPDATE t_join_situation SET join_state='1' WHERE year='2011'`。这种方式适用于更新...

    oracle执行update语句时卡住问题分析及解决办法

    这种只有update无法执行其他语句可以执行的其实是因为记录锁导致的,在oracle中,执行了update或者insert语句后,都会要求commit,如果不commit却强制关闭连接,oracle就会将这条提交的记录锁住。由于我的java程序...

    for_update_和_for_update_nowait_的区别

    标题和描述均聚焦于Oracle数据库中`FOR UPDATE`与`FOR UPDATE NOWAIT`两种锁定机制的区别,这在并发控制和事务处理中具有重要的意义。在深入解析这两种指令之前,我们先来简要回顾一下锁定机制的基本概念。 在...

    Mysql 数据库死锁过程分析(select for update)

    避免这种死锁的一种方法是在设计事务时遵循一定的顺序规则,例如,确保所有事务按照相同的顺序访问和修改数据,或者使用`FOR UPDATE SKIP LOCKED`(Oracle支持,但MySQL不直接支持)来跳过已锁定的行。另外,可以...

    根据update语句自动生成select语句

    在数据库管理中,UPDATE语句用于修改已存在的数据记录,而SELECT语句则用于查询数据。在某些场景下,我们可能需要从UPDATE语句转换为SELECT语句,以验证更新操作将影响哪些行或者理解更新逻辑。这在调试、数据分析或...

    oracle 多表做update insert语句.docx

    今天,我们将讨论 Oracle 中的 Update 语句,包括 Update 语句的基本语法、Update 语句中使用 Select 语句、Update 语句中使用 Join 语句、Insert 语句的使用等。 一、Update 语句的基本语法 Update 语句的基本...

    update语句的优化-oracle .pdf

    在本篇文档中,作者详细总结了在实际项目中针对Oracle数据库的update语句优化的四种方案。以下是对这四种方案的知识点进行详细的阐述: 1. 标准update语法优化: 当面对单表更新或较简单的SQL语句时,可以直接使用...

    shell连接oracle数据库执行SQL工具脚本-支持select+inset+update

    shell连接oracle数据库工具脚本:支持select/insert/update/delete 部署位置:/root/sysmonitor db:数据库文件夹 dbconfig.properties:数据库配置文件, dbConnectTest.sh:连接测试文件 dbExecurteSQL.sh:...

    Oracle各种select查询语法

    update emp set sal=sal*1.05 where job = (select job from emp where ename='SCOTT'); 该语句将更新emp表中job字段等于SCOTT的记录的sal字段。 11、模糊查询 select * from emp where ename like 'S%'; 该...

    ORACLE多表关联的update语句

    在Oracle数据库中,多表关联的UPDATE语句用于更新一个表中的数据,这些数据依赖于另一个或多个表的记录。这种操作在数据整合、错误修正或者数据同步时非常常见。以下我们将详细探讨如何使用不同方式执行多表关联的...

    ORACLE_多表关联_UPDATE_语句

    Oracle数据库中的多表关联UPDATE语句是用于在一个表中更新数据时,依据另一个表的条件进行操作的关键技术。这在处理复杂的数据同步或修正场景时非常有用。在本例中,我们将探讨如何利用多表关联来更新数据,并通过...

    oracle_11gR2_07 数据操作(select,insert,update,delete) 和 常用函数

    oracle_11gR2_07 数据操作(select,insert,update,delete) 和 常用函数(count,max,min,avg,sum,decode,distinct)

    insert/update同时执行(mysql,oracle,sqlserver)

    判断是否存在,存在就update,不存在insert,不是用存储过程解决的。

    ORACLE UPDATE 语句语法与性能分析看法

    本文将深入探讨Oracle中`UPDATE`语句的几种常见用法,以及在不同场景下如何进行性能分析和优化。 #### 简单的`UPDATE`语句 在最基本的层面上,`UPDATE`语句用于修改表中的特定行。例如,在上述例子中,由于客户所在...

    Oracle SQL(SQL for Oracle)

    这本书“Oracle SQL(SQL for Oracle)”显然是为了帮助读者深入理解和掌握在Oracle环境中有效使用SQL。 在Oracle SQL中,有以下几个关键知识点: 1. **数据类型**:Oracle支持多种数据类型,包括数值型(如NUMBER...

    oracle中UPDATE nowait 的使用方法介绍

    在Oracle数据库中,`UPDATE NOWAIT` 是一个用于事务处理的关键字,它允许你更新一行数据,但在数据被其他事务锁定时,它不会等待而是立即返回一个错误信息。这个特性对于处理多线程并发和确保数据一致性至关重要。...

    解析mysql与Oracle update的区别

    如示例所示,Oracle使用的是一个子查询来完成多表更新,这通常涉及到一个`UPDATE`语句嵌套在一个`SELECT`语句中。例如: ```sql Oracle> UPDATE ( SELECT t.charger_id_ AS new_charger_id_ FROM t_cus_year_...

    update语句的优化-oracle

    在Oracle数据库管理中,UPDATE语句是用于修改现有数据表中的记录。然而,不恰当的UPDATE操作可能会导致性能问题,特别是在处理大量数据时。本文将深入探讨如何优化Oracle数据库中的UPDATE语句,以提高数据库效率。 ...

Global site tag (gtag.js) - Google Analytics