Select ..for update(nowait)语句在表级别上产生RS锁,在数据行上产生行级锁(是一种X锁)
2013-09-24 08:27
489 查看
一、悲观封锁
锁在用户修改之前就发挥作用:
Select ..for update(nowait)
Select * from tab1 for update
用户发出这条命令之后,oracle将会对返回集中的数据建立行级封锁,以防止其他用户的修改。
如果此时其他用户对上面返回结果集的数据进行dml或ddl操作都会返回一个错误信息或发生阻塞。
1:对返回结果集进行update或delete操作会发生阻塞。
2:对该表进行ddl操作将会报:Ora-00054:resource busy and acquire with nowait specified.
原因分析
此时Oracle已经对返回的结果集上加了排它的行级锁,所有其他对这些数据进行的修改或删除操作都必须等待这个锁的释放,产生的外在现象就是其他的操作将发生阻塞,这个这个操作commit或rollback.
同样这个查询的事务将会对该表加(DML操作的)表级锁,不允许对该表的任何ddl操作,否则将会报出ora-00054错误::resource busy and acquire with nowait specified.
附加:表级锁是用于防止表的结构的修改。
锁在用户修改之前就发挥作用:
Select ..for update(nowait)
Select * from tab1 for update
用户发出这条命令之后,oracle将会对返回集中的数据建立行级封锁,以防止其他用户的修改。
如果此时其他用户对上面返回结果集的数据进行dml或ddl操作都会返回一个错误信息或发生阻塞。
1:对返回结果集进行update或delete操作会发生阻塞。
2:对该表进行ddl操作将会报:Ora-00054:resource busy and acquire with nowait specified.
原因分析
此时Oracle已经对返回的结果集上加了排它的行级锁,所有其他对这些数据进行的修改或删除操作都必须等待这个锁的释放,产生的外在现象就是其他的操作将发生阻塞,这个这个操作commit或rollback.
同样这个查询的事务将会对该表加(DML操作的)表级锁,不允许对该表的任何ddl操作,否则将会报出ora-00054错误::resource busy and acquire with nowait specified.
附加:表级锁是用于防止表的结构的修改。
相关文章推荐
- oracle select语句中,不加for update和加 for update和for update nowait区别
- for update、for update nowait、select t.*,t.rowid from table的区别
- 20.6 Select…For Update语句与锁
- Select…For Update语句与锁
- Select For update语句浅析
- MySQL update && select ,update的同时select,和for update 语句说再见。
- MySQL update && select ,update的同时select,和for update 语句说再见。
- select for update [nowait]
- select语句后以for update结尾
- Select For update语句浅析
- 数据库中Select For update语句的解析
- 关于MSSQL 2000中Select语句FOR XML产生XML文件学习心得
- SELECT 语句中的 for update (以及 lock in share mode
- No NOWAIT Option in MySQL SELECT FOR UPDATE
- Select For update语句浅析
- 关于MSSQL 2000中Select语句FOR XML产生XML文件学习心得
- Postgre中的 select for update 和 select for update nowait
- select ......for update 语句解释 (文章中有些地方描述的不是很准确)
- Select for update, nowait, skip locked
- select for update nowait 与 select for update 区别