当前课程知识点:数据库概论 >  第八章 事务处理 >  8.2 事务经历 >  事务经历

返回《数据库概论》慕课在线视频课程列表

事务经历在线视频

事务经历

下一节:可串行化调度和前趋图

返回《数据库概论》慕课在线视频列表

事务经历课程教案、知识点、字幕

大家好

我是来自云南大学软件学院的包崇明

下面为大家介绍事务经历

前面我们介绍事务隔离性保证的时候提到

当多个事务并发执行

也就是事务交错执行数据库读写操作时

事务执行结果会相互影响

从而提出了事务隔离性的要求

我们先来对读写操作给出一个定义

读操作是指读取一个数据项的值

写操作是指改变某个数据项的值

数据项一般指数据库表中

确定的一行数据中某字段的值

声明式的SQL语句

最终转换为

由读写操作组成的执行系列

我们使用记号R表示读操作

用W表示写操作

在R和W后是小写字母表示的事务标识

用来识别操作属于哪个事务

数据项及值作为读写操作的参数

用逗号进行分隔

然后放到操作后面的括号中

比如

Ri(A)

表示事务Ti对数据项A的一次读操作

i是事务标识号

用Ti表示该事务

Wj(B)表示

事务Tj对数据项B的一次写操作

Ri(A,50)表示

事务Ti读到数据项A的值是50

Wj(B,80) 表示

事务Tj对数据项B写入的值是80

我们用Ci 来表示

事务Ti 的提交操作

现在事务包含的SQL语句都可以视为

由读操作

写操作

提交操作或者回滚操作组成操作系列

我们将一个操作序列称为事务经历

或者称一个调度

两个事务T1和T2执行的事务经历

可能是这样的

事务T2先对A执行读操作

然后T2将一个新的值写回到A中

随后T1读取A的新值

T1读取B的值

T2读取B的值

然后T2将一个新的值写回到B中

T1提交

最后是T2提交

对于任何事务经历

我们都可以采用这样一种简单的调度方法

让一个事务的所有操作执行完后

才执行其他事务的操作

多个事务操作之间没有交错执行

这种调度称为串行调度

串行调度保证了事务间的执行是隔离的

不会出现并发错误

但这种调度严重影响系统性能

是不可取的

面对一个交错执行的事务经历

如何调度才能保证事务执行

不会出现并发性问题呢

一般需要使用读锁和写锁

来保证这个经历的执行

等价于前面我们介绍的串行调度

具体采用的方法是

当调度器发现某些操作在当前执行顺序中

会破坏隔离性时就会延迟该操作的执行

让后面操作先执行

由此来保证隔离性

如果调度器发现死锁

则通过将某个事务强行异常中止

来解除死锁

调度器依靠上述策略来调度

我们在事务经历中看到的交错操作序列

使得产生的操作序列在执行效果上

等价于一个串行调度

在这种方式下

调度器保证每个事务与其他事务都是隔离的

从而提供了隔离性保证

现在我们来看一下

对一个经历给出一个解释后

按照经历给定的操作顺序

执行后得到的结果

和按照简单串行调度

执行后得到的结果是否一致

事务定义为对数据库的一组读写操作

这些操作要么全部执行

要么全部不执行

是一个逻辑上不可分割的单元

以前面的经历为例

我们可以给这个经历如下一个解释

数据项A和B是某个银行客户

所拥有的两个账户

它们的初始值为A等于50和B等于50

事务T1

是对这两个账户的余额

相加计算该客户的净资产

从而对该客户进行信用评测

假设净资产大于等于100可通过评测

事务T2执行

从账户A到账户B的转账操作

将数额为30的资金

从账户A转入账户B

两个事务都必须满足的一致性要求是

银行客户两个账户的资金总额

不能因为这两个事务而发生变化

根据上面解释

我们得到这样一个扩展的事务经历H

转账事务T2读取A账户余额得到50

然后T2从余额中减去转帐金额30

剩余20

将20写回到账户A中

随后信用评估事务T1读取A的余额

得到20

T1接着读取B账户的余额

得到50

T2读取账户B的余额

得到50

将转入的30和B账户余额50相加

得到80

将80写入B账户

T1将A账户余额20和B账户余额50

相加得到客户净资产为70

没有大于等于100

得到结果是

该客户不能通过信用评估

然后T1提交

最后是T2提交

这个经历的执行表示

转账事务T2成功将数额为30的资金

从账户A转入到账户B

信用评估事务T1成功提交

但得到的结果是

该客户不能通过信用评估

现在我们来看一下

串行调度拥有的两个可能的结果

第一种是信用评估事务T1的

所有操作先执行

执行完再执行转账事务T2的所有操作

这个串行调度得到的执行结果是

信用评估事务T1得到客户的净资产为

50加50等于100

通过了信用测评

转账事务T2也成功完成

第二种是转账事务T2先执行

执行完毕再执行信用评估事务T1

这个串行调度得到的执行结果是

信用评估事务T1得到客户的净资产为

20加80等于100

通过了信用评估

转账事务T2也成功完成

显然我们可看到

两个串行调度得到的结果是正确的

顾客都通过了信用评估

执行经历H

信用评估事务T1得到错误的评估结果

违反了对这两个事务的一致性要求

两个账户的资金总额

既不能凭空多出来也不能凭空减少

这个例子说明

我们讨论的经历H是不合法的

因为他的执行结果不等价于

任何一个可能的串行调度结果

好了

同学们

今天的课就到这

我们下节课见

数据库概论课程列表:

导论

-数据库概述

--Video

-导论--数据库概述

第一章 数据库基础

-1.1 数据库基础

--Video

-第一章 数据库基础--1.1 数据库基础

第二章 关系运算

-2.1 CAP数据库

--CAP数据库

-第二章 关系运算--2.1 CAP数据库

-2.2 自然关系运算1

-- 自然关系运算1

-第二章 关系运算--2.2 自然关系运算1

-2.3 自然关系运算2

--自然关系运算2

-第二章 关系运算--2.3 自然关系运算2

第三章 结构化查询语言SQL

-3.1 SQL概述

-- SQL概述

-3.1 SQL概述--作业

-3.2 数据定义DDL

--数据定义DDL

-3.2 数据定义DDL--作业

-3.3 SQL数据更新DML

--SQL数据更新DML

-3.3 SQL数据更新DML--作业

-3.4 复杂SQL查询操作1

--复杂SQL查询操作1

-第三章 结构化查询语言SQL--3.4 复杂SQL查询操作1

-3.5 复杂SQL查询操作2

--复杂SQL查询操作2

-第三章 结构化查询语言SQL--3.5 复杂SQL查询操作2

第四章 数据库完整性、视图与安全性

-4.1 数据完整性

--4.1 数据完整性

-4.1 数据完整性--作业

-4.2 完整性约束

--完整性约束

-4.2 完整性约束--作业

-4.3 外键约束

--外键约束

-4.3 外键约束--作业

-4.4 触发器

--触发器

-4.4 触发器--作业

-4.5 视图

--视图

-4.5 视图--作业

-4.6 安全性

--安全性

-4.6 安全性--作业

第五章 索引

-5.1 索引

--Video

-5.2 B+树索引

--Video

第六章 规范化理论

-6.1 函数依赖

--Video

-6.2 Armstrong公理

--Video

-6.3 无损分解

--Video

-6.4 范式举例

--Video

-6.5 三种范式

--Video

-6.5 三种范式--作业

第七章 实体关系模型

-7.1-E-R模型概述

--E-R模型概述

-7.2 E-R模型详解

--Video

-7.3 E-R模型的拓展

--Video

-7.4 E-R模型实例分析

--Video

第八章 事务处理

-8.1 事务的ACID性质介绍

--ACID介绍

-8.1 事务的ACID性质介绍--作业

-8.2 事务经历

--事务经历

-8.2 事务经历--作业

-8.3 可串行化调度和前趋图

--可串行化调度和前趋图

-8.3 可串行化调度和前趋图--作业

-8.4 两阶段封锁

--两段锁协议

-8.4 两阶段封锁--作业

-8.5 隔离级别

--隔离级别

-8.5 隔离级别--作业

-8.6 事务恢复

--事务恢复

-8.6 事务恢复--作业

第九章 数据库应用与开发

-9.1 数据库使用介绍

--数据库使用介绍

-9.2 Java访问数据库

--Java访问数据库

-9.2 Java访问数据库--作业

第十章 其他数据库技术概述

-10.1 数据库新技术概述

--Video

事务经历笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。