数据库的封锁

封锁就是事务T在对某个数据对象操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他事务不能更新此数据对象。

基本封锁类型有两种:排它锁(exclusive locks,简称X锁)又称为写锁,和共享锁(share locks,简称S锁)又称为读锁。

1、一级封锁协议

一级封锁协议是指,事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。

一级封锁协议可防止丢失修改,并保证事务T是可恢复的。

2、二级封锁协议

二级封锁协议是指,在一级封锁协议基础上增加事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。

二级封锁协议除防止丢失修改,还可进一步防止读“脏”数据。

3、三级封锁协议

三级封锁协议是指,在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。

三级封锁协议除了防止丢失修改和读“脏”数据外,还进一步防止了不可重复读。

 

可串行化调度

多个事务的并发执行是正确的,当且仅当其结果与按某一次串行地执行这些事务时的结果相同,称这种调度策略为可串行化调度。

两段锁协议

两段锁协议是指所有事务必须分为两个阶段对数据项加锁和解锁。

  • 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;
  • 在释放一个封锁之后,事务不再申请和获得任何其他封锁。

所谓的“两段”锁的含义是,事务分为两个阶段,第一阶段是获得封锁,也称为扩展阶段,在这个阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁;第二阶段是释放封锁,也称为收缩阶段,在这个阶段,事务可以释放任何数据项上的任何类型的锁,但是不能在申请任何锁。

事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库封锁是指在多用户并发访问数据库时,为了维护数据的一致性与完整性,对正在访问某一数据的事务加以限制,使它们不能干扰其他事务所进行的数据操作的机制。 基本的封锁类型有以下几类: 1. 共享(Shared Lock):共享也称为读(Read Lock),是一种读取数据的定机制。当一个事务获得了某个数据项的共享之后,其他事务也可以获得该数据项的共享,但是不能获得该数据项的排他(Exclusive Lock)。 2. 排他(Exclusive Lock):排他也称为写(Write Lock),是一种修改数据的定机制。当一个事务获得了某个数据项的排他之后,其他事务无法获得该数据项的任何类型的。 3. 意向共享(Intent Shared Lock):意向共享是一种向其他事务表明当前事务准备获取某个数据项的共享的机制。当一个事务获得了某个数据项的意向共享后,其他事务可以获得该数据项的共享,但是不能获得该数据项的排他。 4. 意向排他(Intent Exclusive Lock):意向排他是一种向其他事务表明当前事务准备获取某个数据项的排他的机制。当一个事务获得了某个数据项的意向排他后,其他事务不能获得该数据项的任何类型的。 以上四种封锁类型可以组合使用,形成不同的封锁级别。例如,当一个事务需要修改某个数据项时,可以先获取该数据项的意向排他,然后再获取该数据项的排他,以确保该事务在修改该数据项时不会被其他事务干扰。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值