数据库的封锁机制

事务

事务包含四个特性(ACID):原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )

1、原子性:事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 。

2、一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。

3、隔离性:一个事务的执行不能被其它事务干扰。

4、持续性:也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。

并发控制

并发操作有可能带来数据不一致性,数据不一致性包括:丢失修改、不可重复读和读“脏”数据

丢失修改:两个事务T1和T2同时读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。

不可重复读:由于T2的干扰,导致T1前后两次读的数据不一致。

读‘脏’数据:事务T1修改某一数据并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时被T1修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。

(不可重复读和读‘脏’数据要分清,两者不同)

并发控制用正确的方式调度并发操作,避免上述问题的产生。常用的并发控制技术有封锁、时间戳、乐观控制法和多版本并发控制

封锁技术:

封锁包含四种:共享锁(S锁)、排他锁(X锁)、更新锁(U锁)、意向锁

共享锁(S锁) 读锁  :事务T对数据对象A加上S锁,则只允许T读A但不能修改A其他事务只能再对A加S锁而不能加X锁,直到T释放A上的S锁为止。

排他锁(X锁) 写锁  :事务T对数据对象A加上X锁,则只允许T读取和修改A其他任何事务都不能在对A加任何类型的锁,直到T释放A上的锁为止。

更新锁(U锁):

意向锁:对多粒度树中的结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。

注:当出现解锁时,就认定解锁任务开始,在解锁阶段不能再加任何锁

封锁协议(加锁解锁的一些规则)

封锁协议分为一级封锁协议、二级封锁协议、三级封锁协议。

一级封锁协议:事务T在修改数据A之前必须先对其加X锁,直到事务结束才释放。一级封锁协议可以防止丢失修改,并保证事务T是可恢复的。

二级封锁协议:二级封锁协议是指,在一级封锁协议基础上增加事务T在读数据A之前必须先对其加S锁,读完后即可释放S锁。二级封锁协议出防止了丢失修改,还可以进一步防止读“脏”数据

三级封锁协议:三级封锁协议是指,在二级封锁协议的基础上增加事务T在读数据A之前必须先对其加S锁,直到事务结束才释放。三级封锁协议出防止了丢失修改和读“脏”数据外,还可以进一步防止了不可重复读

层层递进,步步完善。

 

 

你可能感兴趣的:(数据库)