[数据库]封锁管理和封锁协议
事务并发操作不合理带来的问题
- 丢失修改
T1事务修改——T2事务修改,此时T1的修改被覆盖,这叫丢失修改。 - 读“脏”数据
T1事务修改——T2读数据——T1撤回修改,此时T2发现读的数据和数据库中不一样,这叫读“脏”数据。 - 不可重复读
T1事务读完——T2事务修改——T1事务再读,发现数据不一样了,这叫不可重复读。
封锁管理
数据库提供两种基本锁:排它锁(X锁,又成为写锁)
和共享锁(S锁,又成为读锁)
。
- 若事务T对数据A上了排他锁,则事务T可以对数据A进行读写操作,而其他事务不能进行读写操作并且也不能加锁。
- 若事务T对数据A上了共享锁,则事务T可以对数据A进行读操作,但不能写,其他事务可以上共享锁,但是不能上排它锁。
封锁协议
三级封锁协议解决:丢失修改
,读“脏”数据
以及不可重复读
带来的数据不一致性。
- 1级封锁协议
事务在修改数据A时要加X锁(排他锁),可以避免丢失修改。 - 2级封锁协议
在一级封锁协议的基础上,事务在读数据的时候,要加S锁(共享锁),读入数据后立即释放S锁(共享锁),可以避免读“脏”数据。(外加上面一种) - 3级封锁协议
在一级封锁协议的基础上,事务在读数据的时候,要加S锁,一直到事务结束后才释放S锁,可以避免不可重复读。(外加上面两种)
两段锁协议
两段锁协议保证了并发操作的可串行化
。两段锁约定:事务在对数据进行读写操作前,必须先获得对数据的封锁,并且在释放一个封锁后不能再获得其他的封锁。这就是两段锁的含义——事务分成获得加锁和解锁两个阶段
。
作者:lizhenghao126
出处:https://www.cnblogs.com/lizhenghao126/p/11053683.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
https://github.com/li-zheng-hao
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)