第八章 并发控制

合集下载

数据库 第八章 并发控制

数据库 第八章 并发控制

并行事务的不同调度
T1 Slock B Y=B=2 Unlock B X lock A A=Y+1 写回A(=3) Unlock A T2 T1 T2 Slock A X=A=2 Unlock A Xlock B B=X+1 写回B(=3) Unlock B
Slock A X=A=3 Unlock A X lock B B=X+1 写回B(=4) Unlock B (a)串行调度
顺序封锁法
• 顺序封锁法是预先对数据对象规定一个 封锁顺序,所有事务都按这个顺序实行 封锁。 • 顺序封锁法可以有效地防止死锁,但也 同样存在问题。事务的封锁请求可以随 着事务的执行而动态地决定,很难事先 确定每一个事务要封锁哪些对象,因此 也就很难按规定的顺序去施加封锁。
死锁的诊断
• 超时法 • 等待图法
T2
T1 (1)SL A SL B 读A,B 求和=150 (2)
T2
不同级别的封锁协议
8.4 活锁和死锁
• 和操作系统一样,封锁的方法可能引起活 锁和死锁。
活锁
• 如果事务T1封锁了数据R,事务T2又请 求封锁R,于是T2等待。T3也请求封锁 R,当T1释放了R上的封锁之后系统首 先批准了T3的请求,T2仍然等待。然后 T4又请求封锁R,当T3释放了R上的封 锁之后系统又批准了T4的请求,...,T2 有可能永远等待,这就是活锁的情形。 • 避免活锁的简单方法是采用先来先服务 的策略。
排它锁
• 排它锁又称为写锁。若事务T对数据对象 A加上X锁,则只允许T读取和修改A, 其它任何事务都不能再对A加任何类型的 锁,直到T释放A上的锁。这就保证了其 它事务在T释放A上的锁之前不能再读取 和修改A。 • 排它锁保护数据对象不被同时读或写

并发控制ppt课件

并发控制ppt课件

T1 R(A)
R(A) Commit
T2 W(A) R(B)
Commit
读写 RW 冲突
6
8.3 并发执行的正确性准则
本节内容回答第三个问题,即:如何知道或判定并发执行后结 果是否正确呢?
1.基本概念
并发原则:既要交错执行,以充分利用系统资源;又要避免访 问冲突。
事务调度(Schedule):是一串事务中所有操作的顺序序列。
并发执行的正确性准则:在当前的DBMS中,均以“冲突 可串行化”作为并发执行的正确性准则。
9
注意:
① 对n个事务,可有n!种排列,即有n!种串行调度。每个串行 调度执行的结果可能不一样,可串行化准则只要求调度和其中某一 个串行调度等价即可。
② 不同的可串行化调度是不一定等价的,即n个事务交付系统执 行后,由于调度不同,可能产生不同的结果,这是允许的。除非特 别规定,用户对这n个事务的执行顺序无要求。
Commit
结果:与串行地执行两个 事务的结果不一致。
写写 WW 冲突
4
2. 读脏数据(Dirty Read)
亦称:读未提交的数据 (Reading Uncommitted Data)。
原因:由于一事务读另一 事务尚未提交的数据引起,称 为写-读冲突(write-read conflict)。
结果:有可能读到要回退 的数据。
T1 T2 R(A) W(A)
R(B) W(B) Commit R(C) W(C) Commit
涉及两个事务的并发调度
2
3.并发的目的(与串行执行比较) 可回答第一个问题。 ⑴ 改善系统的资源利用率; ⑵ 改善短事务的响应时间。
3
8.2 并发执行可能引起的问题

第八章分布式并发控制

第八章分布式并发控制
粒度 小 大 开销 大 小 并发度 高 低
第八章 分布式并发控制
两段封锁协议
两段封锁协议(2PL)是数据库系统中解决并发控 制的重要方法之一,保证事务的可串行性调度。 2PL的实现思想是将事务中的加锁操作和解锁操 作分两阶段完成,要求并发执行的多个事务要 在对数据操作之前进行加锁,且每个事务中的 所有加锁操作要在解锁操作以前完成。 两段封锁协议分为:
第八章 分布式并发控制
并发控制理论基础
事务执行过程的形式化描述
通常以串行化理论来检验并发控制方法的正确性。
依据串行化理论,在数据库上运行的一个事务的所有操作,按其性质分为 读和写两类。 一个事务Ti对数据项x的读操作和写操作记为Ri(x)和Wi(x)。
一个事务Ti所读取数据项的集合,称为Ti的读集,所写的数据项的集合,称 为写集,分别记为R(Ti)和W(Ti)。 设有事务T1,完成的操作如下:T1:x=x+1;y=y+1;则T1可表示为: T1 :R1(x) W1(x) R1(y) W1(y)。 读/写集分别是: R(T1)={x,y} W(T1)={x,y}
可见, H1为串行历程, H2为并行历程。
第八章 分布式并发控制
并发控制理论基础
集中式数据库的可串行化问题
无论在集中式数据库系统中,还是在分布式数据库系 统中,并发调度都要解决并发事务对数据库的冲 突操作问题,使冲突操作串行执行,非冲突操作 并发执行。 在分布式数据库系统中,事务是由分解为各个场地上 的子事务的执行实现的。因此,分布式事务之间 的冲突操作,就转化为了同一场地上的子事务之 间的冲突操作,分布式事务的可串行性调度也转 化为了子事务的可串行性调度问题。
第八章 分布式并发控制
基本概念

第八章 并发控制

第八章 并发控制


人工锁


记录锁
RLOCK() 文件锁



FLOCK()
三级封锁协议


修改数据之前必须加X锁,直到事务结束 读数据之前必须加S锁,直到事务结束

可以解决不可重复读的问题
封锁协议

三级封锁协议

消除不可重复读的问题
封锁协议

不同的需求,使用不同的锁协议

并发程度、数据要求

不同协议的效果
锁的异常——活锁


当多个事务请求封锁同一数据对象时, 有可能出现锁的异常 活锁
问题原因


事务之间未隔离 解决方法:封锁机制 事务管理器

对并发事务进行调度 保证事务的ACID性质
封锁(Locking)


并发控制的主要技术——锁 事务对需操作的数据进行加锁

实现数据的互斥访问 当一个事务访问某个数据项时,其他事务都 不能修改该数据项
封锁(Locking)——类型


丢失修改 不可重复读 读脏数据
丢失修改

事务T1和事务T2 都对数据A进行修 改
读脏数据




事务T1读取数据C并修改 并发事务T2读取C,并作 处理 事务T1发现错误回滚 并发事务T2并不知晓获 得的数据是脏数据
不可重复读



事务T1读取数据C 并发事务T2修改,删除, 插入C 事务T1再次读取数据C, 同一事务中两次读取的 数据C,是不一致的

共享锁(Share Locks,S锁)

读锁 多个事务可对同一数据重复申请加读锁 写锁 一旦事务T对数据A加上了X锁,只允许T对 其进行读写 其他事务需等T释放X锁之后,才能获锁

并发控制技术共40页文档

并发控制技术共40页文档

并发控制
相容矩阵
T1
T2
X
S
X
N
N
S
N
Y
不相容请求 相容请求
并发控制
一级封锁协议
– 事务T在修改数据R之前必须对其加X锁,直 到事务结束才释放。事务结束包括正常结束 (COMMIT)和非正常结束(ROLLBACK)。
– 一级封锁协议可以防止丢失修改,并保证事 务T是可恢复的。在一级封锁协议中,如果 仅仅是读数据而不对其进行修改,是不需要 对其加锁的,因此它不能保证可重复读和不 读“脏”数据。
并发控制
封锁的类型
– 排它锁(X锁,eXclusive lock):事务T对 数据对象A加上请求都不能 成功(因而不能读取和修改R),直至T释 放A上的X锁。
– 共享锁(S锁,Share lock):事务T对数据 对象A加上S锁,则事务T可以读取但不能 修改A,其它事务只能对A加S锁(因而可 以读取A),而不能对A的加X锁(因而不 能修改A),直到T释放A上的S锁。
and SNO = ‘S01’
T2
Delete From SC Where CNO =‘C01’ and SNO =‘S01’
并发控制的必要性
T1 select * from SC where CNO = ‘C01’
and SNO = ‘S01’
select * from SC where CNO = ‘C01’
并发控制
死锁的例子
如果事务T1封锁了数据R1,T2封锁了数据R2, 然后T1又请求封锁R2,因T2已封锁了R2,于 是T1等待T2释放R2上的锁。接着,T2又申请 封锁R1,因T1已经封锁了R1,T2也只能等待 T1释放R1上的锁。这样就出现了T1在等待T2, 而T2又在等待T1的局面,T1和T2两个事务永 远不能结束,形成死锁。

第八章 并发控制 《数据库系统概论》概要

第八章 并发控制 《数据库系统概论》概要

协调并发事务的执行,保证数据库的一致性不受 破坏,同时避免用户得到不正确的数据。

下面以几个例子说明在并发操作下,调度不当 会带来数据的不一致性问题。 有三类数据不一致性:参见P265.图8.1


① 丢失修改(丢失更新) ② 不可重复读(不一致分析) ③ 读“脏”数据(依赖于未提交的更新)
11
数据不一致性: 丢失修改

丢失修改(丢失更新)

一事务所做的更新操作因另一事务的操作而 丢失。两种情况: (1) 一事务所做的更新结果被另一事务的更 新结果“冲掉” 。 参见P265.图8.1(a) (2) 一事务所做的更新结果因另一事务的撤 消而丢失。
12


数据不一致性:丢失修改(续1)

三个事务并行调度:
T1
read(A); write(A); read(B); rollback;
T2
read(A); Commit;
T1
read(A); read(B); write(A); rollback;
T2
T3
read(A) write(A);
read(A)
10
8.1 并发控制概述

DBMS并发调度子系统的职责
第八章 并发 控制
《数据库系统概论》
离性,需要对多个 事务的并发操作进行控制 --- 并发控制。 本章介绍的并发控制技术属于事务处理技术。目的 是保证事务的隔离性。


事务是数据库恢复和并发控制的基本单位。
8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁
事务T2 t2~t3
4
并发操作:并行执行

多个事务并行地存取DB

并发控制的主要方法是

并发控制的主要方法是

并发控制的主要方法是并发控制是指多个用户同时对数据库进行操作时的一种机制,它的目的是保证数据库在并发操作过程中能够保持数据的一致性、完整性和正确性。

在并发控制中,有一些主要的方法和技术被广泛应用于数据库系统。

1. 锁定机制锁定机制是最常见和基本的并发控制方法之一,它通过在并发操作过程中对数据资源加锁来保证数据的一致性和正确性。

在数据库中,可以使用不同级别的锁(如共享锁和排他锁)对数据进行加锁,以控制并发操作对数据的访问。

锁定机制可以有效地避免数据的丢失和不一致,但也可能引起死锁和性能问题。

2. 事务处理事务处理是一种常用的并发控制方法,它将多个数据库操作组合成一个逻辑单元,要么全部执行成功,要么全部回滚,以确保数据的一致性。

通过对事务的隔离和原子性操作的要求,可以有效地控制并发操作对数据的影响。

在事务处理中,可以使用锁定机制、时间戳机制和多版本并发控制等技术来实现并发控制。

3. 多版本并发控制(MVCC)多版本并发控制是一种先进的并发控制方法,它通过为每个事务创建一个独立的读取版本,使得多个事务可以同时读取和修改数据,而不会相互干扰。

多版本并发控制通过为每个数据项的每个版本分配一个唯一的时间戳来实现,它可以提高并发访问性能和资源利用率,并减少死锁和阻塞问题的发生。

4. 并发控制协议并发控制协议是一种用于控制并发操作的协议,它定义了多个事务之间的执行顺序和互斥关系。

常见的并发控制协议有两阶段锁定协议(2PL)、时间戳排序协议(TSO)、验证协议和快照隔离协议等。

并发控制协议可以根据实际应用场景和需求选择合适的协议,以确保数据的一致性和正确性。

5. 乐观并发控制乐观并发控制是一种无锁的并发控制方法,它基于假设多个事务之间的冲突很少发生,事务可以同时执行而不发生冲突。

通过在事务执行过程中记录每个数据项的读取和写入操作,在提交时对事务进行冲突检测和冲突解决,可以有效地保证数据的一致性和正确性。

乐观并发控制适用于并发读多写少的场景,并具有较好的性能和可扩展性。

并发控制的方法

并发控制的方法

并发控制的方法
并发控制是指在多个用户或进程同时访问共享资源时,保证数据一致性和完整性的一种技术。

下面介绍几种常见的并发控制方法。

1. 乐观并发控制
乐观并发控制是指在多个用户或进程同时访问共享资源时,先不加锁,而是在提交操作时检查是否有冲突。

如果有冲突,则回滚事务,重新尝试。

这种方法适用于并发冲突较少的场景,能够提高并发性能。

2. 悲观并发控制
悲观并发控制是指在多个用户或进程同时访问共享资源时,先加锁,保证每个用户或进程的操作互不干扰。

这种方法适用于并发冲突较多的场景,能够保证数据的一致性和完整性。

3. 两阶段锁
两阶段锁是指在执行事务时,先获取所有需要的锁,然后执行操作,最后释放所有锁。

这种方法能够保证数据的一致性和完整性,但是会降低并发性能。

4. 时间戳并发控制
时间戳并发控制是指在每个事务开始时,给事务赋予一个时间戳,每个数据项也有一个时间戳。

在执行操作时,比较事务时间戳和数据项时间戳,如果事务时间戳早于数据项时间戳,则执行操作,否则回滚事务。

这种方法能够保证数据的一致性和完整性,但是会增加系统开销。

5. 多版本并发控制
多版本并发控制是指在每个数据项中存储多个版本,每个版本有一个时间戳。

在执行操作时,选择最新的版本进行操作。

这种方法能够提高并发性能,但是会增加系统开销。

以上是几种常见的并发控制方法,不同的方法适用于不同的场景,需要根据具体情况选择合适的方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
读“脏”数据是指事务T1修改某一数 数据是指事务 修改某一数 并将其写回磁盘,事务T2读取同一 据,并将其写回磁盘,事务 读取同一 数据后,T1由于某种原因被撤消,这时 数据后, 由于某种原因被撤消, 由于某种原因被撤消 T1已修改过的数据恢复原值,T2读到的 已修改过的数据恢复原值, 读到的 已修改过的数据恢复原值 数据就与数据库中的数据不一致, 数据就与数据库中的数据不一致,则T2 读到的数据就为"脏 数据即不正确的数 读到的数据就为 脏"数据即不正确的数 据。
第三节 封锁协议ห้องสมุดไป่ตู้
在运用X锁和 锁这两种基本封锁 在运用 锁和S锁这两种基本封锁, 锁和 锁这两种基本封锁, 对数据对象加锁时, 对数据对象加锁时,还需要约定一些规 则,例如应何时申请X锁或 锁、持锁时 例如应何时申请 锁或S锁 锁或 何时释放等。 间、何时释放等。 我们称这些规则为: 我们称这些规则为: 封锁协议( 封锁协议(Locking Protocol)。 )。
三、三级封锁协议
三级封锁协议是: 三级封锁协议是: 一级封锁协议加上事务T在读取数据 一级封锁协议加上事务 在读取数据 R之前必须先对其加 锁,直到事务结束 之前必须先对其加S锁 之前必须先对其加 才释放。 才释放。
说明:
三级封锁协议除防止了丢失修改和不 数据外, 读‘脏’数据外,还进一步防止了不可 重复读。 重复读。 第四节 活锁和死锁 点击进入>> 点击进入
避免活锁的简单方法
避免活锁的简单方法是采用先来先服 务的策略。 务的策略。
二.死锁
死锁: 死锁: 如果事务T1封锁了数据 封锁了数据R1, 封锁了数 如果事务 封锁了数据 ,T2封锁了数 R2,然后T1又请求封锁 又请求封锁R2, T2已封锁 据R2,然后T1又请求封锁R2,因T2已封锁 R2,于是T1等待 释放R2上的锁 等待T2释放 上的锁。 了R2,于是T1等待T2释放R2上的锁。接着 T2又申请封锁 ,因T1已封锁了 ,T2也 又申请封锁R1, 已封锁了R1, 也 又申请封锁 已封锁了 只能等待T1释放 上的锁。 释放R1上的锁 只能等待 释放 上的锁。 这样就出现了T1在等待 在等待T2, 这样就出现了 在等待 ,而T2又在等 又在等 待T1的局面,T1和T2两个事务永远不能结束, 的局面, 和 两个事务永远不能结束, 的局面 两个事务永远不能结束 形成死锁。 形成死锁。
一、一级封锁协议
一级封锁协议是: 一级封锁协议是: 事务T在修改数据 在修改数据R之前必须先对其 事务 在修改数据 之前必须先对其 加X锁,直到事务结束才释放。 锁 直到事务结束才释放。 事务结束包括正常结束( 事务结束包括正常结束(COMMIT) ) 和非正常结束( 和非正常结束(ROLLBACK)。 )。
第四节 活锁和死锁
和操作系统一样, 和操作系统一样,封锁的方法可能引 起活锁和死锁。 起活锁和死锁。
一.活锁
活锁: 活锁: 如果事务T1封锁了数据 封锁了数据R,事务T2又请求 如果事务 封锁了数据 ,事务 又请求 等待。 也请求封锁R, 封锁R,于是T2等待 T3也请求封锁 封锁R,于是T2等待。T3也请求封锁R,当 T1释放了 上的封锁之后系统首先批准了T3 T1释放了R上的封锁之后系统首先批准了T3 释放了R上的封锁之后系统首先批准了 的请求, 仍然等待 然后T4又请求封锁 仍然等待。 又请求封锁R, 的请求,T2仍然等待。然后 又请求封锁 , 释放了R上的封锁之后系统又批准了 当T3释放了 上的封锁之后系统又批准了 释放了 上的封锁之后系统又批准了T4 的请求, 有可能永远等待, 的请求,......,T2有可能永远等待,这就是 , 有可能永远等待 活锁的情形 。
说明
一级封锁协议可防止丢失修改, 一级封锁协议可防止丢失修改,并保 证事务T是可恢复的 是可恢复的。 证事务 是可恢复的。 在一级封锁协议中, 在一级封锁协议中,如果仅仅是读数 据不对其进行修改,是不需要加锁的, 据不对其进行修改,是不需要加锁的, 所以它不能保证可重复读和不读“ 所以它不能保证可重复读和不读“脏” 数据。 数据。
同时并发方式
在多处理系统中, 在多处理系统中,每个处理机可以 运行一个事务, 运行一个事务,多个处理机可以同时 运行多个事务, 运行多个事务,实现多个事务真正的 并行运行, 并行运行,这种并行方式称为同时并 发方式。 发方式。 并发控制机制是衡量一个数据库管 理系统性能的重要标志之一。 理系统性能的重要标志之一。
⑵事务T1按一定条件从数据库中读取了某 事务 按一定条件从数据库中读取了某 些数据记录后,事务T2删除了其中部分 些数据记录后,事务 删除了其中部分 记录, 再次按相同条件读取数据时, 记录,当T1再次按相同条件读取数据时, 再次按相同条件读取数据时 发现某些记录神秘地消失了。 发现某些记录神秘地消失了。
上述三类数据不一致性的主要原因
并发操作破坏了事务的隔离性。 并发操作破坏了事务的隔离性。 解决方法: 解决方法: 并发控制就是要用正确的方式调度并发操 作,使一个用户事务的执行不受其它事务的 干扰,从而避免造成数据的不一致性。 干扰,从而避免造成数据的不一致性。 并发控制的主要技术是封锁( 并发控制的主要技术是封锁(Locking) ) 点击进入>>。 第二节 封锁 点击进入 。
⑶事务T1按一定条件从数据库中读取某些 事务 按一定条件从数据库中读取某些 数据记录后,事务T2插入了一些记录 插入了一些记录, 数据记录后,事务 插入了一些记录, 再次按相同条件读取数据时, 当T1再次按相同条件读取数据时,发现 再次按相同条件读取数据时 多了一些记录。 多了一些记录。
3.读“脏”数据(dirty read)
第一节 并发控制概述
下面我们先来看一个例子, 下面我们先来看一个例子,说明并发 操作带来的数据的不一致性问题。 操作带来的数据的不一致性问题。
考虑飞机订票系统中的一个活动序列:
①售票点(甲事务)读出某航班的机票余额A, 售票点(甲事务)读出某航班的机票余额 , 设A=16。 。 售票点(乙事务) ②售票点(乙事务)读出同一航班的机票余额 A,也为 。 ,也为16。 售票点卖出一张机票,修改余额A←A-1。所 ③售票点卖出一张机票,修改余额 。 写回数据库。 以A为15,把A写回数据库。 为 , 写回数据库 售票点也卖出一张机票,修改余额A←A-1, ④售票点也卖出一张机票,修改余额 , 所以A为 , 写回数据库。 所以 为15,把A写回数据库。 写回数据库 结果明明卖出两张机票, 结果明明卖出两张机票,数据库中机票余 额只减少1。 额只减少 。
二、二级封锁协议
二级封锁协议是: 二级封锁协议是: 一级封锁协议加上事务T在读取数据 一级封锁协议加上事务 在读取数据 R之前必须先对其加 锁,读完后即可释 之前必须先对其加S锁 之前必须先对其加 放S锁。 锁
说明
二级封锁协议除防止了丢失修改, 二级封锁协议除防止了丢失修改,还 可进一步防止读“ 数据。 可进一步防止读“脏”数据。
对封锁方式规定不同的规则, 对封锁方式规定不同的规则,就形成 了各种不同的封锁协议。 了各种不同的封锁协议。 下面介绍三级封锁协议。 下面介绍三级封锁协议。
三级封锁协议
对并发操作的不正确调度可能会带来 丢失修改、不可重复读和读“ 丢失修改、不可重复读和读“脏”数据 等不一致性问题, 等不一致性问题,三级封锁协议分别在 不同程度上解决了这一问题。 不同程度上解决了这一问题。 为并发操作的正确调度提供一定的保 证。不同级别的封锁协议达到的系统一 致性级别是不同的。 致性级别是不同的。
基本的封锁类型有两种:
排它锁 (Exclusive Locks,简记为 锁) ; ,简记为X锁 共享锁 (Share Locks,简记为 锁)。 ,简记为S锁 。
排它锁:
排它锁又称为写锁。 排它锁又称为写锁。 若事务T对数据对象 加上X锁 对数据对象A加上 若事务 对数据对象 加上 锁,则只 允许T读取和修改 读取和修改A, 允许 读取和修改 ,其它任何事务都不 能再对A加任何类型的锁 直到T释放 加任何类型的锁, 释放A 能再对 加任何类型的锁,直到 释放 上的锁。 上的锁。 这就保证了其它事务在T释放 释放A上的 这就保证了其它事务在 释放 上的 锁之前不能再读取和修改A。 锁之前不能再读取和修改 。
读取某一数据后, 对其做了修改, ⑴事务T1读取某一数据后,事务 对其做了修改,当 事务 读取某一数据后 事务T2对其做了修改 事务1再次读该数据时 得到与前一次不同的值。 再次读该数据时, 事务 再次读该数据时,得到与前一次不同的值。 例如, 例如, T1读取 读取B=100进行运算; 进行运算; 读取 进行运算 T2读取同一数据 ,对其进行修改后将 读取同一数据B,对其进行修改后将B=200写回数 读取同一数据 写回数 据库; 据库; T1为了对读取值校对重读 ,B已为 为了对读取值校对重读B, 已为 已为200,与第一次读 为了对读取值校对重读 , 取值不一致。 取值不一致。
死锁的预防:
在数据库中, 在数据库中,产生死锁的原因是两个 或多个事务都已封锁了一些数据对象, 或多个事务都已封锁了一些数据对象, 然后又都请求对已被其他事务封锁的数 据对象加锁,从而出现死等待。 据对象加锁,从而出现死等待。 防止死锁的发生其实就是要破坏产生 死锁的条件。 死锁的条件。
防止死锁的发生其实就是要破坏产生 死锁的条件。 死锁的条件。 预防死锁通常有两种方法: 预防死锁通常有两种方法:
共享锁:
共享锁又称为读锁。 共享锁又称为读锁。 若事务T对数据对象 加上S锁 则事务T 对数据对象A加上 若事务 对数据对象 加上 锁,则事务 可以读A,但不能修改A, 可以读 ,但不能修改 ,其它事务只能再对 A加S锁,而不能加 锁,直到 释放 上的 释放A上的 加 锁 而不能加X锁 直到T释放 上的S 锁。 这就保证了其它事务可以读A,但在T释 这就保证了其它事务可以读 ,但在 释 上的S锁之前不能对 做任何修改。 放A上的 锁之前不能对 做任何修改。 上的 锁之前不能对A做任何修改
相关文档
最新文档