`

数据库隔离级别总结

阅读更多

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

    数据库事务总结

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

    数据库(主要是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 索引创建原则与示例...

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

    (第一卷)Microsoft.SQL.Server.2008技术内幕:T-SQL语言基础

    9.3 隔离级别 9.4 死锁 9.5 总结 9.6 练习 第10章 可编程对象 10.1 变量 10.2 批处理 10.3 流程控制元素 10.4 游标 10.5 临时表 10.6 动态SQL 10.7 例程 10.8 错误处理 10.9 总结 附录A SQL SERVER...

    (第二卷)Microsoft SQL Server 2008技术内幕:T-SQL语言基础

    9.3 隔离级别 9.4 死锁 9.5 总结 9.6 练习 第10章 可编程对象 10.1 变量 10.2 批处理 10.3 流程控制元素 10.4 游标 10.5 临时表 10.6 动态SQL 10.7 例程 10.8 错误处理 10.9 总结 附录A...

Global site tag (gtag.js) - Google Analytics