简介
本文介绍软考数据库篇,关于事务的考核内容。软考在数据库事务篇的考察,几乎都是出选择题类题目,不过在数据库系统工程师的内容里,会在下午提以一个小题出现,可见还是比较重要的知识点。
考纲内容
考核并发控制技术中,关于事务的概念、数据的不一致问题(丢失更新、读脏数据、不可重复度)、封锁技术。
其中数据不一致问题主要考核对其所属类别的识别,包含如下四类。
1、丢失更新 指两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。
关键词 对同一数据进行修改,交叉读、交叉写。
2、不可重复度 T1读取数据后,T2对该数据进行了修改,当T1再次读该数据的时候,验证发现和上一次读取的不一致。主要有如下3种情况:
- 事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读改数据得到与前一次不同的值;
- 事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同的条件读取数据时,发现某些记录已经消失了。
- 事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按照相同条件读取数据时,发现记录变多了,这类情况也叫做幻影读。
关键词 事务两次读,验证发现结果不一致。
3、读“脏”数据 是指事务T1修改某一数据并将其写回磁盘,事务T2读取同一数据后, T1由于某种原因被撤销,这是T1修改过的数据恢复了原值,T2读取的数据就与数据库中的不一致,即T2读到了“脏”数据。
需牢记关键字,因为关于数据不一致的判断情况,其实是很多类型都可以混为一谈的,我们需要通过关键信息判断出题目侧重的类型,从而做出判断。
习题
【题目1】 假设有如下两个事务T1、T2,其并发执行如下图所示。则T1和T2 ( )
-------------------------------------------
T1 T2
Read(A);Read(A);
A:=A-1;
Write(A);A:=A-2;Write(A);
-------------------------------------------
A.不存在并发问题
B.存在丢失修改
C.存在不可重复度
D.存在读“脏”数据
解析:答案B,本题中,T1和T2都读取了数据A,然后T1修改了A,并写回;T2修改了A,也写回,这时候我们发现,T2的修改覆盖掉了T1的修改,即T1对A的修改没有得到体现,即丢失了更新。
【题目2】 假设有如下两个事务T1、T2,其并发执行如下图所示。则T1和T2产生的不一致为 ( )
-------------------------------------------
T1 T2读取 X=1;读取 Y=2;求和 =3;
读取X=1;
X:=X-1;
写X=0;读取 X=0;读取 Y=2;求和 =2验证不对;
-------------------------------------------
A.丢失修改
B.不可重复读
C.读“脏”数据
D.幻影读
解析:答案C。T2首先读取了X和Y,求和,然后T1修改了X的值,T2事务为了验证前面的计算,重新进行求和操作,但这是读取的X值已经被T1进行了修改,从而导致第二次计算的结果和第一次的不一致,验证结果是不对的。是不可重复读的特性。