数据库封锁协议
2021/5/16 19:25:41
本文主要是介绍数据库封锁协议,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一级、二级、三级封锁协议、两段锁协议:
在运用X锁和S锁对数据对象加锁时,还需要约定一些规则 ,例如何时申请X锁或S锁、持锁时间、何时释放等。称这些规则为封锁协议(Locking Protocol)。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。不同的封锁协议,在不同的程度上为并发操作的正确调度提供一定的保证。
一、一级封锁协议
一级封锁协议是:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。
一级封锁协议可以防止丢失修改,并保证事务T是可恢复的。使用一级封锁协议可以解决丢失修改问题。
在一级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,它不能保证可重复读和不读“脏”数据。
二、二级封锁协议
二级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后方可释放S锁。
二级封锁协议除防止了丢失修改,还可以进一步防止读“脏”数据。但在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。
三、三级封锁协议
三级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。
四 、两段锁协议
两段锁协议是指所有的事务必须分两个阶段对数据项加锁和解锁。即事务分两个阶段
,第一个阶段是获得封锁
。事务可以获得任何数据项上的任何类型的锁,但是不能释放;第二阶段是释放封锁
,事务可以释放任何数据项上的任何类型的锁,但不能申请。第一阶段是获得封锁的阶段,称为扩展阶段
:其实也就是该阶段可以进入加锁操作,在对任何数据进行读操作之前要申请获得S锁
,在进行写操作之前要申请并获得X锁
,加锁不成功,则事务进入等待状态
,直到加锁成功才继续执行。就是加锁后就不能解锁
了。第二阶段是释放封锁的阶段,称为收缩阶段
:当事务释放一个封锁后,事务进入封锁阶段,在该阶段只能进行解锁而不能再进行加锁操作
。
这篇关于数据库封锁协议的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-13怎么通过 JavaScript 或其他编程语言来实现监听屏幕高度变化功能?-icode9专业技术文章分享
- 2024-11-12聊聊我们那些年用过的表达式引擎组件
- 2024-11-12让项目数据更有说服力:五款必备数据可视化管理工具推荐
- 2024-11-12人到一定年纪,要学会远离多巴胺
- 2024-11-12解读:精益生产管理的目的是什么?如何操作?
- 2024-11-12Sku预研作业
- 2024-11-12文心一言API密钥:分步申请指南
- 2024-11-12初学者指南:轻松掌握后台交互
- 2024-11-12从零开始学习:封装基础知识详解
- 2024-11-12JSON对象入门教程:轻松掌握基础用法