Oracle的共享锁和排它锁
来源:互联网 发布:rnm网络是什么意思 编辑:程序博客网 时间:2024/05/19 06:51
oracle有两种模式的锁:排他锁(exclusive lock,即X锁)和共享锁(share lock,即S锁)。
共享锁:如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。
排他锁:如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。
共享锁无法阻止其他用户读取和修改表中的数据,只能阻止其他用户使用ALTER TABLE命令改变指定表的结构或用DROP TABLE命令删除指定表。多个用户可以同时获得相同数据上的共享锁。
执行DML语句时可以获得排他锁,并且正在被修改的所有记录都会获得排他锁。在你启动的事务内,排他锁阻止其他用户获得正在处理的数据上的排他锁,直至执行COMMIT或ROLLBACK语句。这样,两个用户就无法同时更新相同的数据。某个用户试图更新被另一个用户锁定的数据时,第一个用户必须等待至去除排他锁后才能进行操作。
通过DML语句对一张表的某一行数据进行修改,一个事务开始,背后的步骤是:
1.对这张表加一个共享锁。这么做是为了防止别的会话通过DDL语句修改这张表的表结构。DDL语句要修改了这张表,就必须给表加上排他锁。但是现在给表加了共享锁了,也就排斥了DDL去加排他锁;
2.对修改的那一行加一个排他锁,别的会话不能修改这一行。但是我对整张表加的是共享锁而不是排他锁,所以别的会话还是可以修改其他行(也经历1、2两个步骤)。
默认情况下的select ... for update语句与DML语句相似,效果相当于启动了一个会话级别的事务,在对应的数据表(select所涉及的所有数据表)上加入一个数据表级共享锁(TM,lmode=3)。同时,在对应的数据行中加入独占锁(TX,lmode=6)。
注意:只有表级的共享锁没有行级共享锁。的确,也是有row share的锁的,只是这个不是代表行的,是代表表锁的种类。指的是在行上加排他锁,在表上加共享锁,表级共享、行级排他。
- Oracle的共享锁和排它锁
- MSSQL 共享锁和排它锁
- 共享锁和排它锁
- 什么是共享锁和排它锁
- 排它锁和共享锁
- 排它锁 共享锁的区别
- 共享锁&排它锁
- 排它锁,共享锁,乐观锁,排它锁
- 共享锁(S锁)和排它锁(X锁)
- 共享锁和排它锁(ReentrantReadWriteLock)
- mysql中的共享锁和排它锁
- Shared and Exclusive Locks 共享和排它锁
- 乐观锁、悲观锁、共享锁和排它锁的简单理解
- sql server行级锁,排它锁,共享锁的使用
- sql server行级锁,排它锁,共享锁的使用
- sql server行级锁,排它锁,共享锁的使用
- sql server行级锁,排它锁,共享锁的使用
- sql server行级锁,排它锁,共享锁的使用
- PAT 三角形判断 Java版本
- Java之反射类的构造函数,通过单元测试反射创建类的对象
- 继续刷水题= =||分拆素数和 HDU 2098
- Android中的Bitmap集锦
- 数据结构的重要性
- Oracle的共享锁和排它锁
- html5(历史管理)
- servlet验证码
- popViewControllerAnimated 之后不走deallloc的几个原因:
- Java向前引用容易出错的地方
- Ants poj 1852
- JAVA : String StringBuilder String Buffer
- html5(历史管理)
- HTML布局和链接