当前课程知识点:数据库概论 >  第八章 事务处理 >  8.5 隔离级别 >  隔离级别

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

隔离级别在线视频

隔离级别

下一节:事务恢复

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

隔离级别课程教案、知识点、字幕

同学们

大家好

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

包崇明

现在为大家介绍

现在为大家介绍

事务隔离性级别

前面我们学习了调度器

应用两阶段锁协议进行调度

可以保证产生可串行化的经历

但是保证严格的可串行化

对系统性能会产生极大影响

甚至导致系统的不可用

由于这个原因

人们提出了事务调度器

应该降低两阶段锁协议的要求

从而降低事务间

由于访问冲突而产生的等待

增加有效的并发来提高性能

降低两阶段锁协议的要求

意味着事务的隔离性得不到有效的保障

可能使有冲突操作的事务

相互影响产生不一致的结果

所以我们必须在

性能和隔离性得不到有效保证

这两者间做一个权衡

对具体的运用程序来说

不一定要求对所有事务

都有严格的隔离性需求

出现某些不一致的结果也是可以接受的

所以数据库系统为事务提供了隔离级别

让程序员可以根据需要

选择相应的隔离级别

两阶段锁协议中

对写锁要求事务结束的时候才释放

对读锁什么时候释放没有要求

我们根据锁释放的时间将锁进一步分类

对于在事务结束才释放的锁

我们称为长期锁

对于操作执行完毕后就释放的锁

我们称为短期锁。

数据库系统定义的隔离级别

就是通过调度器在为操作申请锁时

除了写操作申请的是长期锁

读操作可以申请长期

或者短期锁来实现各种隔离级别

对一个操作申请短期锁

意味着操作结束后就释放数据上的锁

其他事务就能申请到该数据的锁

从而破坏了两阶段锁的规则3

可能出现不一致的问题

下面我们介绍

数据库系统提供的常见的隔离级别

并说明在这种隔离级别下

会出现什么样的不一致问题或者异常

常见的隔离级别有一下四种

未提交读隔离级别

在该种方式下

当前事务不需要申请任何类型的封锁

就可以执行操作

从而可能会读到未提交的修改结果

也就是可能会读到其他事务的临时结果

如果运用这种隔离级别

组成事务的语句不能包含更新语句

第二种隔离级别是

提交读隔离级别

在这种隔离级别下

需要遵循两阶段锁协议的规则一

读写操作之前都需要申请锁

不过对于读锁

申请的只是短期读锁

也就是读完数据后立即释放的锁

提交读能够避免读取其他事务

未提交的修改结果

但是两次读到的结果可能不一致

另外也会产生丢失更新问题

第三种隔离级别是

可重复读隔离级别

需要遵循两阶段锁协议的规则

读写之前都需要申请锁

不过对于读锁

申请的是长期读锁

也就是事务结束后才释放的读锁

在可重复读隔离级别下

提交读隔离级别可能产生的丢失更新等异常

不会再出现

两次读到的结果也一致了

但还可能产生一种称为幽灵更新的异常

虽然读锁和写锁都是长期锁

看起来完全遵循了两阶段锁协议

为什么还会产生异常呢

这是由于我们没有对两阶段锁协议

要求的所有对象加合适的锁

这类对象我们称为谓词

也就是大家熟悉的

select语句中

关键字where后面的选择条件

谓词负责选择出满足条件的行数据集

出现幽灵更新异常的原因是

调度器只对谓词只加了短期读锁

导致一个事务Ti

在读取满足要求的行数据后

其他事务能够插入一条

也满足Ti要求的数据

也满足Ti要求的数据

导致Ti得到的结果不完整

从而出现了幽灵更新异常。

第四种是

可串行化隔离级别

可串行化隔离级别对数据和谓词的读写

都加了长期锁

事务以一种可串行化的调度策略

实施并发执行

以避免它们之间相互的干扰现象

从而事务的隔离性得到保证

不会出现上面所有异常

我们通过一张表总结了

这四类隔离级别加锁策略

以及可能出现的异常

从这张表中我们可了解到

除了未提交读级别

其他隔离级别在在数据和谓词的对象上

其他隔离级别在在数据和谓词的对象上

都加了长期写锁

但在数据和谓词上

根据不同隔离级别采用不同的策略

加长锁或者是短期读锁

但在数据和谓词对象上

根据不同的隔离级别

采用不同的策略

加长期或者短期锁

今天的课就到这里

同学们再见

数据库概论课程列表:

导论

-数据库概述

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

隔离级别笔记与讨论

也许你还感兴趣的课程:

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