oracle 锁详解

行級鎖:

insert,update,delete,select...for update 執行這些語句時會自動為修改的記錄行添加行級鎖,直到事務rollback或commit時才會釋放鎖資源。

表級鎖:

1.行共享 (ROW SHARE)

表示在行上加排他锁,在表上加共享锁,表级共享、行级排他。

2.行排他(ROW EXCLUSIVE) – 禁止使用排他锁和共享锁,禁止同时使用EXCLUSIVE,SHARE ROW EXCLUSIVE锁。不禁止用户增删改表记录。

3.共享行排他(SHARE ROW EXCLUSIVE)

SHARE ROW EXCLUSIVE 比 SHARE MODE 限制更强一些,它只允许其他的事務查询或者用select for update来锁定记录,但是不允许其他事務获取SHARE mode的锁,更不要提更改数据了。而SHARE mode,允许其他事務或许share mode的锁,也可以通过select for update 来锁定记录。

4.共享锁(SHARE)

如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。直到查詢完成,共享鎖才得以釋放。共享鎖的表自己也是不能修改數據的,所以一般不會給行上共享鎖。

对这张表加一个共享锁。这么做是为了防止别的会话通过DDL语句修改这张表的表结构。DDL语句要修改了这张表,就必须给表加上排他锁。但是现在给表加了共享锁了,也就排斥了DDL去加排他锁。

5.排他(EXCLUSIVE)

排他锁很好理解,是自己独占资源。其它会话想再在同一对象上加共享或排他锁都是不允许的。不过其它会话可以读,这也证明普通的读是不上锁的。如果查的对象被修改,查询操作还会会被重定向到对应的撤销块(原来的数据),以保证事务事物隔离和读一致。

对修改的那一行加一个排他锁,别的会话不能修改这一行。但是我对整张表加的是共享锁而不是排他锁,
所以别的会话还是可以修改其他行(也经历1、2两个步骤)。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值