当前课程知识点:数据库概论 >  第八章 事务处理 >  8.1 事务的ACID性质介绍 >  ACID介绍

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

ACID介绍在线视频

ACID介绍

下一节:事务经历

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

ACID介绍课程教案、知识点、字幕

同学们好

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

下面我为大家介绍更新事务

首先

我们来看一下

大型应用程序执行过程中

可能出现的问题

以及事务提供的ACID性质

如何解决这些问题

20世纪50年代开始

人们在开发大型应用程序的时候

遇到了一系列问题

以银行的日常业务处理程序为例

程序必须允许多个出纳员

同时处理多个顾客账户的读取和更新操作

这类系统可能会出现以下三种问题

第一类问题是

程序执行产生不一致的结果

考虑这样一种情形

当一个顾客提出转账需求

程序需要执行两个操作

首先从转出账户扣除转账金额

然后将这笔金额

加到顾客的另外一个账户上

假设顾客的每一条账户信息

都是存储在磁盘文件中的一条记录

程序首先从文件中读出转出账户记录

扣除转账金额

然后将这条记录写回磁盘文件

接着读出转入账户记录

在准备写入转账金额的时候

出现了电源故障

程序崩溃

转账金额没有写入转入账户

顾客账户信息出现不一致的结果

转出账户被扣款

而转入账户却没有入账

问题是2

并发执行可能会出现错误

假设出纳员1正在为一个顾客转账

从顾客账户A转一笔钱到顾客账户B

出纳员2正在为这个顾客做信用评估

需要将他两个账户的余额进行累加

以判断他是否能够通过信用评估

如果出纳员1

操作的程序刚将转账金额从账户A扣除

还没有在账户B加上这笔钱的时候

出纳员2操作的程序

就读出顾客的

两个账户的余额进行了累加操作

那么出纳员2看到的

将是比顾客实际存款要少的金额

由此可能导致这位顾客不能通过信用评估

这意味着并发执行的业务

可能读到业务处理的中间结果而相互干扰

问题3是

不确定更新过的数据

是否已经存储到磁盘文件中

为了减少磁盘的访问次数

我们通常采用缓存技术

就是将常用的磁盘页面读入内存

先在内存中对数据更新然后再写回磁盘

这需要一种策略来解决

何时将缓存写入磁盘

频繁写回磁盘意味着不能减少磁盘IO

缓存时间过长

又担心发生系统崩溃丢失信息

这导致了不能确定更新后的数据

是否已经写回磁盘文件

在文件系统时代

人们需要通过编程来解决上述问题

在数据库系统中

我们可通过事务来解决上述问题

我们先来看一下事务的定义

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

这些操作要么全部执行

要么全部不执行

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

比如转账业务可定义为一个事务

这个事务包括读出转出账户余额

转出账户扣除转账金额

读出转入账户余额

转入账户加上转账金额四个操作

信用评估业务也可定义为一个事务

包括从两个账户读出余额的读操作

对于哪些操作可定义为一个事务

是由程序员根据业务逻辑规则来决定的

比如将转账业务定义为一个事务

是依据顾客在银行的存款金额

不能凭空增加也不能凭空减少这样的规则

要求转账过程中

从转出账户转出多少钱

转入账户就一定要转入多少钱

程序员将一组操作定义为事务后

数据库系统通过对事务

提供以下四个保证来解决

上述银行业务系统可能遇到的问题

这四个保证我们称之为

ACID保证或事务的ACID性质

ACID中A代表Atomicity

称为原子性

C代表Consistency

称为一致性

I 代表Isolation

称为隔离性

D 代表Durability

称为持久性

下面我们对这四个事务性质的含义

做详细的解释

原子性是指

事务包含的操作集合

是不可分割的逻辑单元

也就是说

这些操作对于数据库而言

要么全做要么全不做

不能部分地完成

即便发生系统崩溃也仍能得到保证

原子性解决了转账业务

可能产生不一致结果的问题

一致性是指

多个事务并发执行不会破坏

每一个事务需要遵循的逻辑规则

一致性保证在逻辑上不是独立的

它蕴含于事务的隔离性保证

也就是说

当隔离性得到保证

一致性也能得到保证

所以我们重点介绍事务的隔离性

我们将不同事务操作交错执行

定义为事务的并发执行

当两个事务并发执行时

一个事务可能读写

另外一个事务正在处理的中间数据

这两个事务执行结果就会相互影响

出现上提到的第二类问题

比如我们前面提到的转账事务

和信用评估事务并发执行的时候

信用评估事务执行时

读到了转账事务正在读写的数据的中间结果

导致顾客不能通过信用评估

但如果我们让事务串行执行

即一个事务的全部操作执行完后

再开始执行另外一个事务

就不会出现这类问题

隔离性保证事务并发执行的结果

等同于某个串行执行结果

解决了由于并发执行可能出现的第二类问题

持久性是指

当事务提交后

系统保证事务的更新数据一定写入磁盘

对数据的持久性提供了保证

即使出现系统崩溃

也能够保证该事务是可恢复的

这样更新后数据的持久性得到了保证

解决了前面提到的第三个问题

下面我们对SQL语言中

事务的语法做简单介绍

我们用

BEGIN TRANSACTION语句

来启动一个事务

其后是组成事务的一条

或者多条sql语句

最后通过提交或者回滚来结束这个事务

如果事务成功结束

我们用

Commit TRANSACTION语句

来提交事务

更新的数据将写入磁盘文件

其他并发事务能够访问事务更新后的数据

如果事务执行过程中出现错误

我们用

ROLLBACK TRANSACTION语句

来回滚事务

通知数据库系统事务没有成功结束

需要恢复事务更新了的数据

其他并发事务可访问恢复后的数据

对事物的ACID属性介绍完毕

谢谢大家

数据库概论课程列表:

导论

-数据库概述

--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

ACID介绍笔记与讨论

也许你还感兴趣的课程:

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