原文地址:http://blog.sina.com.cn/s/blog_61cd89f60102e7di.html
在生产数据库中,我们为了保证数据读、写的唯一性,经常会碰到下面五种锁语句,区别在那?相信对于新手而言真正搞懂的不多,下面我们用实例说明一下:
1.FOR UPDATE、
2.FOR UPDATE OF COLUMN、
3.FOR UPDATE WAIT 3、
4.FOR UPDATE NOWAIT、
5.FOR UPDATE NO WAIT SKIP LOCK
先看几个例子:
1.select * from Table for update --锁定表的所有行,只能读不能写
2.select * from Table where pkid = 1 for update --只锁定pkid=1的行
3.select * from Table a join Table b on a.pkid=b.pkid for update-- 锁定两个表的所有记录
4.select * from Table a join Table b on a.pkid=b.pkid where a.pkid = 10 for update --锁定两个
--表的中满足条件的行
5. select * from Table1 a join Table b on a.pkid=b.pkid where a.pkid = 10 for update of a.pkid 只锁定Table1中满足条件的行
for update 是把所有的表都锁点 for update of 根据of 后表的条件锁定相对应的表
第一点:
对于单个表读写操作而言,FOR UPDATE与FOR UPDATE OF COLUMN这两语句是一样的,不加条件是全表锁定,加条件是对行级别的锁定,我们举个例子
SELECT * FROM TABLE FOR UPDATE
SELECT * FROM TABLE FOR UPDATE OF TABLE_COLUMN
上面两个没有加WHERE条件,是对全表进行锁定
SELECT * FROM TABLE WHERE TABLE_COLUMN='条件' FOR UPDATE[FOR UPDATE OF COLUMN]
此时查询加了查询条件,是对表符合条件记录的一种行级别的锁定
再次提醒,FOR UPDATE 与FOR UPDATE OF 对于单表操作是一样的
那么FOR UPDATE OF 与 FOR UPDATE的区别在那呢,在多表进行操作时,FOR UPDATE OF只锁定列所在的表进行锁定,而且是表级别的锁定,FOR UPDATE是对多个表进行锁定,不懂看例子
1.select * from Table1 a join Table b on a.pkid=b.pkid where a.pkid = 10 for update of a.pkid
2.select * from Table1 a join Table b on a.pkid=b.pkid where a.pkid = 10 for update
1与2的区别在于,1只锁定表a,而2却要把两个表都要锁定,这才是二者真正的区别所在,即for update 是
把所有的表都锁点 for update of 根据of 后表的条件锁定相对应的表
第二点:关于NOWAIT(如果一定要用FOR UPDATE,我更建议加上NOWAIT)
当有LOCK冲突时会提示错误并结束STATEMENT而不是在那里等待(比如:要查的行已经被其它事务锁了,当前的锁事务与之冲突,加上nowait,当前的事务会结束会提示错误并立即结束 STATEMENT而不再等待).
WAIT 子句指定等待其他用户释放锁的秒数,防止无限期的等待。
“使用FOR UPDATE WAIT”子句的优点如下:
1.防止无限期地等待被锁定的行;
2.允许应用程序中对锁的等待时间进行更多的控制。
3.对于交互式应用程序非常有用,因为这些用户不能等待不确定
4.若使用了skip locked,则可以越过锁定的行,不会报告由wait n 引发的‘资源忙’异常报告
相关推荐
### 数据库Oracle锁:FOR UPDATE OF与FOR UPDATE的区别 在Oracle数据库中,为了确保数据的一致性和准确性,尤其是在多用户环境中进行并发操作时,锁机制是必不可少的一部分。本文将详细介绍`FOR UPDATE`与`FOR ...
标题和描述均聚焦于Oracle数据库中`FOR UPDATE`与`FOR UPDATE NOWAIT`两种锁定机制的区别,这在并发控制和事务处理中具有重要的意义。在深入解析这两种指令之前,我们先来简要回顾一下锁定机制的基本概念。 在...
例如:`BEGIN FOR cr IN (SELECT * FROM t_join_situation WHERE year='2011') LOOP UPDATE t_join_situation SET join_state='1' WHERE current of cr; END LOOP`。这种方式适用于大批量数据的更新,但需要注意游标...
这种只有update无法执行其他语句可以执行的其实是因为记录锁导致的,在oracle中,执行了update或者insert语句后,都会要求commit,如果不commit却强制关闭连接,oracle就会将这条提交的记录锁住。由于我的java程序...
在本篇文档中,作者详细总结了在实际项目中针对Oracle数据库的update语句优化的四种方案。以下是对这四种方案的知识点进行详细的阐述: 1. 标准update语法优化: 当面对单表更新或较简单的SQL语句时,可以直接使用...
在Oracle数据库中,UPDATE语句是用于修改已存在数据的基本操作之一。在上述示例中,我们看到三种不同的UPDATE语句形式,它们各自处理特定的情况并具有不同的性能特点。 1) **最简单的形式**: 这种情况下,我们更新...
在Oracle数据库中,多表关联的UPDATE语句用于更新一个表中的数据,这些数据依赖于另一个或多个表的记录。这种操作在数据整合、错误修正或者数据同步时非常常见。以下我们将详细探讨如何使用不同方式执行多表关联的...
Oracle数据库中的多表关联UPDATE语句是用于在一个表中更新数据时,依据另一个表的条件进行操作的关键技术。这在处理复杂的数据同步或修正场景时非常有用。在本例中,我们将探讨如何利用多表关联来更新数据,并通过...
### ORACLE UPDATE 语句语法与性能分析 #### 引言 在数据库管理与操作中,`UPDATE`语句是SQL语言中极为重要的组成部分,它允许我们修改已存在的记录,从而保持数据的时效性和准确性。Oracle数据库作为企业级应用中...
DataX-Oracle新增writeMode支持update的两个jar包已经修改好,使用方法可以看https://blog.csdn.net/qq_36802726/article/details/137118015
Oracle Server JRE 7 Update 55 是Oracle公司发布的一款针对Java运行环境(Java Runtime Environment)的更新版本,主要用于在Windows x64平台上支持Oracle服务器的运行。JRE是Java应用程序能够在任何兼容的计算机上...
Oracle 多表 Update 语句详解 在 Oracle 中,Update 语句是数据库操作中的重要组成部分。 Update 语句可以对数据库中的数据进行修改,更新和插入。今天,我们将讨论 Oracle 中的 Update 语句,包括 Update 语句的...
Oracle发布的Linux,内核支持asm driver
1. **安装与配置**:包括Oracle Provider for OLE DB的下载、安装步骤,以及在开发环境中配置所需的环境变量和连接设置。 2. **连接管理**:讲解如何创建和管理数据库连接,包括使用连接字符串、身份验证机制(如...
在Oracle数据库中,`UPDATE NOWAIT` 是一个用于事务处理的关键字,它允许你更新一行数据,但在数据被其他事务锁定时,它不会等待而是立即返回一个错误信息。这个特性对于处理多线程并发和确保数据一致性至关重要。...
"Statement Tracer for Oracle"是一个专门针对Oracle数据库的代码跟踪工具,它帮助开发者和DBA深入分析SQL语句的执行情况,从而提高数据库性能和解决问题。 Statement Tracer for Oracle的主要功能包括: 1. **...
这本书“Oracle SQL(SQL for Oracle)”显然是为了帮助读者深入理解和掌握在Oracle环境中有效使用SQL。 在Oracle SQL中,有以下几个关键知识点: 1. **数据类型**:Oracle支持多种数据类型,包括数值型(如NUMBER...
在整个过程中,保持与Oracle官方文档的同步,以获取最新的兼容性和安全建议。记住,安装和管理Oracle数据库需要谨慎操作,避免对生产环境造成任何不必要的影响。如果你在安装或配置过程中遇到问题,可以查阅Oracle的...
shell连接oracle数据库工具脚本:支持select/insert/update/delete 部署位置:/root/sysmonitor db:数据库文件夹 dbconfig.properties:数据库配置文件, dbConnectTest.sh:连接测试文件 dbExecurteSQL.sh:...
在数据库管理领域,MySQL和Oracle都是广泛使用的数据库系统,它们在很多方面有着相似的功能,但在某些特定操作上,比如多表更新(update),两者存在一些差异。本文将深入解析MySQL和Oracle在多表更新时的不同之处。...