事务的事务锁保护的是该事务提交前所有被该事务所操作过的数据行?

阐述了事务锁(TX锁)在并发操作中的作用,包括其如何保护数据行免受冲突,以及在事务结束后的释放过程。解释了TX锁与行级锁的区别,并详细描述了事务锁的实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个会话里的当前事务的当前DML操作操作的对象,比如是一数据行。而该数据行已经被另一个会话里的事务所操作过,所以这个另一个会话里的事务的事务锁会锁定保护着该数据行。即使例如在一个事务开始前, savepoint a; 之后进行了对该数据行的操作,最后rollback to a;这样,该数据行上的行级锁已经被撤销了,但是该事务还没有结束,只是他的undo快被撤销了,所以该事务的事务锁还是保护着该数据行。所以,这个一个会话里的当前事务的当前DML操作要操作该数据行,首先必须得到保护该数据行的另一个会话里的事务的那个事务锁,这又是不可能的,因为另一个会话里的事务还没有结束,对应的事务锁没有释放掉。

当另一个会话里的事务结束了,z则对应的事务锁释放掉了。那么,此时,该数据行没有锁保护,这个一个会话里的当前事务对应的事务锁就可以保护它了。


注释:

事务的事务锁保护的是该事务提交前所有被该事务所操作过的数据行。



TX锁称为事务锁或行级锁。

TX锁(事务锁)又被成行级锁

TX锁为什么又被成为行级锁,是因为数据行一旦被某个事务所操作,则该数据行的锁位上就会置为该事务的在该数据行所在的数据块块头上的事务槽号。由于事务槽号对应于一个事务(由XID确定的,在事务表上的),而一个事务对应有一个自己的事务锁(即TX锁),所以该数据行的锁位上置为该事务的在该数据行所在的数据块块头上的事务槽号,表示该数据行被事务槽号对应的事务所拥有的事务锁所保护,故而TX锁又被成为行级锁。该数据行的锁位就是一个标记,标识数据行被哪个事务的事务锁所保护。

(不是)


TX锁是用于提高并发效率的目的,而保护该事务提交前所有被该事务所操作过的数据行的是各自数据行上的行级锁。(参见《Know More About Oracle Row Lock》)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值