面试题之数据库事务隔离级别
一、简介
为了解决脏读、不可重复读、幻读,数据库提供了事务隔离级别的概念,可以最大程度地避免以上三种情况的发生。
根据隔离程度从低到高分为:
- Read Uncommitted(读未提交);
- Read Committed(读已提交);
- Repeatable Read(可重复读);
- Serializable(串行化);
二、详解
下面对各个隔离级别做一个简介:
- Read Uncommitted(读未提交):最低的隔离级别,但是并发性能最高,指的是一个事务可以读取到另外一个事务并未提交的数据。如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据(写操作加写锁,读操作不加锁)。读未提交会出现脏读、不可重复读、幻读。
- Read Committed(读已提交):指的是一个事务的更新操作在未提交之前,另外一个事务是读取不到同一数据更新后的结果,这就避免了脏读。读已提交会锁定当前正在读取的行的数据( 写操作加写锁,读操作加读锁)。读已提交避免了脏读,但是会出现不可重复读、幻读问题。
- Repeatable Read(可重复读):mysql的默认的隔离级别,指的是在一个事务内,对相同条件的数据读取结果是相同的,不管其他事务有没有对其进行更新,也不管更新是否已经提交到数据库。可重复读会锁定读取到的所有行直到事务结束,其他事务的更新操作只能等到事务结束之后才能进行。可重复读避免了脏读、不可重复读,但是会出现幻读问题。
- Serializable(串行化):最高的隔离级别,当然并发性能最低。指的是所有的事务操作依次顺序执行,事务只能一个接着一个执行,不能并发执行。可序列化对表进行加锁,可以有效避免脏读、不可重复读、幻读问题,但是效率比较低,通常会用其他并发级别加上相应的并发锁机制来取代它。
注意:在MySQL数据库中,支持上面四种隔离级别,默认的为Repeatable read (可重复读);而在Oracle数据库中,只支持Serializable (串行化)级别和Read committed (读已提交)这两种级别,其中默认的为Read committed级别。
三、总结
下面通过一张表格展示各个隔离级别对脏读、不可重复读、幻读问题的处理:
事务隔离级别 |
脏读 |
不可重复读 |
幻读 |
Read Uncommitted(读未提交) |
可能会出现 |
可能会出现 |
可能会出现 |
Read Committed(读已提交) |
不会出现 |
可能会出现 |
可能会出现 |
Repeatable Read(可重复读) |
不会出现 |
不会出现 |
可能会出现 |
Serializable(串行化) |
不会出现 |
不会出现 |
不会出现 |
- 隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大(事务的隔离级别和数据库并发性是成反比的,隔离级别越高,并发性越低)。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed。它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。
- 不可重复读和读提交的区别:
- 不可重复读:读操作会锁定读取到的所有行直到事务结束,可重复读的锁粒度更大;
- 读提交:读操作是加锁到本次读操作结束,读提交的锁粒度相对较小;
面试题之数据库事务隔离级别相关推荐
- mysql mvcc 读写阻塞_mysql面试题MVCC原理事务隔离级别_aiailingfei的博客-CSDN博客
原文作者:小小一只鸟 原文标题:mysql面试题MVCC原理事务隔离级别 发布时间:2021-01-19 19:43:38 mysql事务隔离级别可重复读面试题 熊大 话说今天漂亮的妹子给我发过一张图 ...
- 数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)
一.数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这四 ...
- 数据库事务隔离级别+Spring 声明性事务隔离级别
数据库事务隔离级别 数据库提供了四种事务隔离级别, 不同的隔离级别采用不同的锁类开来实现. 在四种隔离级别中, Serializable的级别最高, Read Uncommited级别最低. 大多数数 ...
- mysql数据库事务隔离级别是_数据库事务隔离级别-MySQL为例 · Sean
在银行系统的存取款过程中,当遇到对一个账户并发存取的时候,系统该如何处理比较好.可能不少人会想到线程同步,然而在应用层使用同步会导致对象锁定,大大影响并发效率.此时,充分利用数据库的事务隔离机制可以很 ...
- 概述MySQL数据库---事务隔离级别
同一个应用程序中的多个事务或不同应用程序中的多个事务在同一个数据集上并发执行时, 可能会出现许多意外的问题,事务并发处理可能引起的问题可分为如下三种类型: 脏读(Drity Read): 已知有两个事 ...
- 数据库事务隔离级别及脏读、不可重复读、幻读的理解
开篇声明,由于两位大佬排版不够美观,然后又发现一些歧义,因此我集大佬之所长,精心整理并加以完善,可放心阅读. http://blog.csdn.net/yuxin6866/article/deta ...
- 数据库事务隔离级别有哪些?
数据库事务隔离级别: 1.Read Uncommitted(读未提交): 2.Read Committed(读已提交): 3.Repeatable Read(可重复读取): 4.Serializabl ...
- mysql数据库事务隔离级别演示
mysql数据库事务隔离级别演示 关键词: 一.基本概念 二.事务的四个特性(ACID) 三.事务的用法 3.1 相关命令 3.2 使用步骤 四.数据库的隔离级别 五.示例演示(每组事务结束手动com ...
- PG数据库事务隔离级别
Postgres数据库事务隔离级别介绍 0. What is Database Transaction? 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列 ...
- 数据库事务隔离级别举例详解
目录 一.前言 1.1.4种事务隔离级别 1.2.3种读现象 二.举例说明 2.1.读未提交 2.2.读已提交 2.3.可重复读 2.4.串行化 一.前言 本文主要对4种事务隔离级别,具体举例说明各自 ...
最新文章
- POPTEST老李谈JVM、JRE、JDK、java ee sdk with jdk区别
- Spring JDBC-Spring事务管理之数据库事务基础知识
- java tomcat 内存设置,tomcat下java的内存设置
- mysql 服务器性能,mysql服务器性能配置
- 一个“登录框“引发的安全问题
- 容器编排技术 -- Kubernetes Pod概述
- 使用jQuery的blockUI来实现页面回传数据时的等待页面
- SU sunmo命令学习
- 数据库修复工具 - DatabaseCompressor 之从9M到900K+
- Ajax程序设计入门
- Linux安装配置 VNC Server
- 烟雨要饭网最终版源码
- 30天Python基础(正则表达式)
- 2018.12.3比赛题目:电子警察
- MySQL篇【5】——约束
- 思科WLC与AP无法正常Join
- 利用Python进行随机取名
- java map 队列_JavaSE-List/Map/Queue
- Kubernetes PVC一直处于Pending状态
- 笔记-自媒体技术与软文写作
热门文章
- C/C++[codeup 1925]特殊排序
- 从Logistic Regression 到 Neural Network
- 算法:从有序数组中移除重复的数据26. Remove Duplicates from Sorted Array
- 基于PCA降维实现人脸识别
- java 简易扫雷_JAVA基础课程设计 简易扫雷
- Lattice - 规划模块 1.采样轨迹 2.计算轨迹cost 3 循环检测筛选轨迹
- 表格文字超数量就竖排_干货 |超实用Word、Excel、PPT软件技能
- [LeetCode][easy]Roman to Integer
- 编写爬虫遇到的问题总结
- NP、P、NPC、NP-hard 概念辨析