详解:S锁(读锁)和X锁(写锁)

本文详细解释了事务中X锁(写锁)和S锁(读锁)的区别,以及一级封锁协议防止丢失修改,二级封锁协议避免读脏数据,三级封锁协议解决不可重复读的问题。通过实例阐述并发控制在数据库中的应用和解决策略。

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

事务T读取数据R

X锁:写锁,排它锁(exclusive locks独家排它)
T对R加X锁,T只能读取和修改,其他事务不能对R+任何锁。

S锁:读锁,共享锁(share locks)
T对R+S锁,T只能读,不能改,其他事务可以对R+S锁。

写锁挺好记的,xie,X锁

在这里插入图片描述

并发控制:
当多个用户同时更新运行时,用于保护数据库的完整性的各种技术

并发控制产生的问题及解决方案:

1.丢失修改,比如A改了数据C,B也改了数据C,会造成A对数据C的修改丢失,故一级封锁协议可防止丢失修改。

一级封锁协议:事务T在修改数据R之前必修加X锁,直到事务结束才释放。(也就是当事务T对R加X锁后,其他事务对R不能加任何锁)

即A在修改前对C加W锁,使B此期间不能修改与读取 不能加W锁,A修改后B获得对C加W锁 B读到的数据即为修改后的数据

2.读脏数据,B对C+20,C变70.A读取数据C为70,而另外一边B改了数据C为50,A读取了脏数据C为70。故二级封锁协议可防止丢失修改+读脏数据。

二级封锁协议:一级封锁协议+事务T在读取数据R前对其加读锁,读完后释放S锁。(其他事务可以对R加S锁,直到T释放R上的读锁)

就是B在改C之前对数据C加W锁,A此时无法对C加S锁,直到B事务释放W锁后释放W锁A获得了对C加S锁。注意读脏数据是读了一次数据库

3.不可重复读。比如A读到C为120,B进行操作:使数据C减20为100,A此时读到数据C为100。故三级封锁协议解决读脏数据+不可重复读+丢失修改

三级封锁协议:一级封锁协议+事务T在读数据R前+S锁,直到事务结束才释放

就是A在读C之前加S锁 此时B不能修改,不能加W锁,但能加R锁,这样A第二次读数据不变,注意不可重复读是读了两次数据库

  Python指南,学习Python的一切

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尾迹双冒号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值