`

数据库隔离级别总结

阅读更多

在数据库系统中,隔离是定义一个操作对数据所做的改变如何/何时对其它的并行操作可见。
隔离并不改变锁本身的行为,而是通过实行不同的锁机制实现的。比如是否加锁,加多长时间的锁,加什么类型的锁等。同时,也会影响排它情况下的可见性(如read uncommited)。

数据库系统有四个隔离级别。对数据库使用何种隔离级别要审慎分析,因为
1. 维护一个最高的隔离级别虽然会防止数据的出错,但是却导致了并行度的损失,以及导致死锁出现的可能性增加。
2. 然而,降低隔离级别,却会引起一些难以发现的bug。

一、READ UNCOMMITTED(未提交读): 
不添加共享锁。所以其它事务B可以在事务A对记录的读取过程中修改同一记录,可能会导致A读取的数据是一个被破坏的或者说不完整不正确的数据。
另外,在事务A中可以读取到事务B(未提交)中修改的数据。比如事务B对R记录修改了,但未提交。此时,在事务A中读取R记录,读出的是被B修改过的数据。
可能发生的问题:脏读。

二、READ COMMITTED(提交读): 
在事务A中读取数据时对记录添加共享锁,但读取结束立即释放。其它事务B对这个记录的试图修改会一直等待直到A中的读取过程结束,而不需要整个事务A的结束。所以,在事务A的不同阶段对同一记录的读取结果可能是不同的。
可能发生的问题:不可重复读。

三、REPEATABLE READ(可重复读): 
对于读出的记录,添加共享锁直到事务A结束。其它事务B对这个记录的试图修改会一直等待直到事务A结束。
可能发生的问题:当执行一个范围查询时,可能会发生幻读。

四、SERIALIZABLE(序列化):
添加范围锁(比如表锁,页锁等,关于range lock,我也没有很深入的研究),直到事务A结束。以此阻止其它事务B对此范围内的insert,update等操作。
幻读,脏读,不可重复读等问题都不会发生。

我们看到,当执行不同的隔离级别时,可能会发生各种各样不同的问题。下面对它们进行总结并举例说明。
1、脏读
脏读发生在一个事务A读取了被另一个事务B修改,但是还未提交的数据。假如B回退,则事务A读取的是无效的数据。这跟不可重复读类似,但是第二个事务不需要执行提交。 

2、不可重复读
在基于锁的并行控制方法中,如果在执行select时不添加读锁,就会发生不可重复读问题。
在多版本并行控制机制中,当一个遇到提交冲突的事务需要回退但却被释放时,会发生不可重复读问题。

例如有两个事务,事务2提交成功,它所做的修改已经可见。然而,事务1已经读取了一个其它的值。在序列化和可重复读的隔离级别中,数据库管理系统会返回旧值,即在被事务2修改之前的值。在提交读和未提交读隔离级别下,可能会返回被更新的值,这就是“不可重复读”。

有两个策略可以防止这个问题的发生:
1. 推迟事务2的执行,直至事务1提交或者回退。这种策略在使用锁时应用。
2. 而在多版本并行控制中,事务2可以被先提交。而事务1,继续执行在旧版本的数据上。当事务1终于尝试提交时,数据库会检验它的结果是否和事务1、事务2顺序执行时一样。如果是,则事务1提交成功。如果不是,事务1会被回退。

发生的情况:没有范围锁。
如何避免:实行序列化隔离模式,在任何一个低级别的隔离中都可能会发生。

3、幻读
幻读发生在当两个完全相同的查询执行时,第二次查询所返回的结果集跟第一个查询不相同。

 

总结如下所示:

隔离级别 是否存在脏读 是否存在不可重复读 是否存在幻读
Read UnCommited(未提交读)  Y Y Y
Read Commited (提交读 oraclel默认) N Y Y
Repeatable Read(可重复读(MySql默认)) N N Y
Serializable(可序列化
分享到:
评论

相关推荐

    mysql数据库学习总结

    mysql整理资料上传,包含了DDL(数据库定义语言)、DML(数据库操纵语言)的增删改查,还有DCL(数据库控制语句)以及事务隔离级别、数据库主从的原理和配置,以及一些sql调优的信息等等

    数据库知识点总结

    那么Mysql在实际企业中一般使用的隔离级别是什么吗?为什么?4. 为什么要使用索引?5. 索引这么多优点,为什么不对表中每个字段都创建索引呢?6. 索引是如何提升查询速度的?7. 请说出你知道的索引失效的几种情况?8...

    数据库系统及应用课程总结.docx

    并发控制干扰问题、可串行性、封锁、死锁、隔离级别、封锁与隔离级别;恢复故障类型、备份类型、日志的概念、恢复模型、备份转储、还原。第九章为关系数据理论:函数依赖术语和符号;函数依赖的公理系统Amstrong公理...

    数据库事务总结

    事务的基本特征;事务的隔离级别;在数据库操作过程中很可能出现几种不确定的...在选取数据库的隔离级别时,应该注意以下几个处理的原则:.锁,锁的特点,多个用户同时对数据库的并发操作时会带来以下数据不一致的问题....

    最新JAVA面试题总结之数据库.docx

    各种隔离级别包括读未提交、读已提交、可重复读和可串行化,每种级别都有其解决的问题和性能考虑。 5. Oracle 中的分页: Oracle 中使用 rownum 来进行分页,这个是效率最好的分页方法。Hibernate 也是使用 rownum...

    数据库(主要是MySQL)相关面试知识点总结

    自己秋招总结的内容~~~ 数据库(主要是MySQL)相关面试...分布式和集群、主从服务器、数据库的数据结构、索引以及索引创建、数据库设计四大范式、反范式化、事务基本要素、隔离级别及实现、事务并发问题、MVCC、SQL注入

    《分布式数据库技术金融应用规范》的技术架构及分布式事务核心功能的解读揭秘v1.0.pptx

    7、分布式事务隔离级别的功能效果及测试验证方法 8、分布式事务原子性的功能效果及测试验证方法 9、分布式事务读一致性的功能效果及测试验证方法 10、分布式事务写一致性的功能效果及测试验证方法 11、分布式锁...

    Oracle数据库、SQL

    17.4事务的隔离级别 35 17.5数据库开发的关键挑战 35 17.6锁的概念 36 17.7 Oracle的锁机制 36 17.8事务不提交的后果 36 17.9回滚事务rollback 36 17.10保留点savepoint 36 十八、 数据库对象:视图view 37 18.1带子...

    程序员5个刷题网站-InterviewFAQ-database:总结数据库部分的面试常见问题

    大多数数据库系统的默认隔离级别(但不是MySQL默认的)。 它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。 这种隔离级别也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例...

    SQL Server 2008数据库设计与实现

     10.5.2 隔离级别  10.6 完整性与并发性编程  10.6.1 悲观锁定  10.6.2 实现单线程代码块  10.6.3 乐观锁定  10.6.4 基于行的锁定  10.6.5 逻辑工作单元  10.7 最佳实践  10.8 总结 第11章 数据...

    MySQL常见面试题答案及总结

    1.7MySOL 事务的隔离级别,分别有什么特点 1.8对于关系型数据库而言,索引是相当重要的概念,请回答有关索引的几个问题1.9MySQL: 索引优化、查询优化. 1.10简要说一下数据库范式 基础篇 ........

    Mysql面试题总结大全

    4、隔离级别、MVCC 5、MySQL 的锁机制 6、数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 彻底理解数据库事务 7、悲观锁:假定会发生并发冲突...

    深入解析DB2--高级管理,内部体系结构与诊断案例.part1.rar

    7.4 隔离级别与锁 7.5 最大化并发性 7.6 锁相关的性能问题总结 7.7 锁与应用程序开发 7.8 本章小结 第8章 索引设计与优化 8.1 索引概念 8.2 索引结构 8.3 理解索引访问机制 8.4 索引设计 8.5 索引创建原则与示例...

    江神JAVA开发面经超级总结

    详细介绍抽象类和接口、数据库范式、TCP三次握手和四次挥手、数据库各种锁...数据库范式、MySQL的事务隔离级别、Union和Union All的区别、Drop、Delete、Truncate的区别、MySQL的索引、InnoDB的事务和日志的实现方式、...

    mysql数据库my.cnf配置文件

    # MySQL支持4种事务隔离级别,他们分别是: # READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. # 如没有指定,MySQL默认采用的是REPEATABLE-READ,ORACLE默认的是READ-COMMITTED log_bin = mysql...

    JDBC总结——事务

    文章目录事务一、事务的基本介绍1、概念2、操作3、操作实例4、MySQL数据库中默认自动提交二、事务的四大特征三、事务的隔离级别1、概念2、存在的问题3、隔离级别四、Jdbc事务控制1、概述2、控制事务的API:3、核心...

    DB2 OLTP系统的物理设计最佳实践(中文版)

    隔离级别 45 应用程序死锁 46 性能和监控 47 最佳实践 49 数据库规模调整和容量管理 51 估算系统资源并设计一个均衡的系统 51 自调优内存管理器 STMM 54 DB2 配置顾问程序 55 最佳实践 57 可靠性 可用性和可伸缩性 ...

    总结最近MySQL面试题大全

    1、MySQL 中有哪几种锁? 1、表级锁: 开销小, 加锁快; 不会出现死锁; 锁定粒度大, 发生锁冲突的概率最高, 并发度...支持 ACID 的事务, 支持事务的四种隔离级别; 支持行级锁及外键约束: 因此可以支持写并发;

    repository::seedling: walker-知识库:个人知识库汇总

    repository 知识库 :China:简体中文 | :United_...事务隔离级别 Redis Redis 总结 Redis持久化 RedLock分布式锁 如何做可靠的分布式锁 网络 Network 计算机网络 Https 计算机网络知识总结 对于 Java 初学者来说: 本文

    weblogic平台J2EE调优策略

    2.6.2 优化事务隔离级别和事务属性 2.6.3 其他一些小技巧 第三章 数据库调优 3.1.1 Oracle性能优化 3.1.2 Oracle的其他调整 第四章 操作系统调优 4.1 操作系统调整 4.1.1 HP-UX 4.1.2 Solaris 4.1.3 AIX 4.1.4 Linux...

Global site tag (gtag.js) - Google Analytics