数据库事务的隔离级别(三浅一深,秒懂!!!)
数据库事务的隔离级别
数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。
√: 可能出现 ×: 不会出现
说明 | 脏读 | 不可重复读 | 幻读 |
Read uncommitted | √ | √ | √ |
Read committed | × | √ | √ |
Repeatable read | × | × | √ |
Serializable | × | × | × |
注意:我们讨论隔离级别的场景,主要是在多个事务并发的情况下,因此,接下来的讲解都围绕事务并发。
Read uncommitted 读未提交
公司发工资了,领导把20000元打到小老虎的账号上,但是该事务并未提交,而小老虎正好去查看账户,发现工资已经到账,是20000元整,非常高兴。可是不幸的是,领导发现发给小老虎的工资金额不对,是16000元,于是迅速修改金额后,将事务提交,最后小老虎实际的工资只有16000元。。
出现上述情况,即我们所说的脏读,两个并发的事务,“事务A:领导给小老虎发工资”、“事务B:小老虎查询工资账户”,事务B读取了事务A尚未提交的数据。当隔离级别设置为Read uncommitted时,就可能出现脏读,如何避免脏读,请看下一个隔离级别。
Read committed 读提交
小老虎拿着工资卡去消费,系统读取到卡里确实有2000元,而此时他的母老虎也正好在网上转账,把小老虎工资卡的2000元转到另一账户,并在小老虎之前提交了事务,当小老虎扣款时,系统检查到小老虎的工资卡已经没有钱,扣款失败,小老虎十分纳闷,明明卡里有钱,为何…
出现上述情况,即我们所说的不可重复读,两个并发的事务,“事务A:小老虎消费”、“事务B:小老虎的母老虎网上转账”,事务A事先读取了数据,事务B紧接了更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变。当隔离级别设置为Read committed时,避免了脏读,但是可能会造成不可重复读。大多数数据库的默认级别就是Read committed,比如Sql Server , Oracle。如何解决不可重复读这一问题,请看下一个隔离级别。
Repeatable read 重复读
当小老虎拿着工资卡去消费时,一旦系统开始读取工资卡信息(即事务开始),小老虎的母老虎就不可能对该记录进行修改,也就是小老虎的母老虎不能在此时转账。这就避免了不可重复读。小老虎的母老虎工作在银行部门,她时常通过银行内部系统查看小老虎的信用卡消费记录。有一天,她正在查询到小老虎当月信用卡的总消费金额(select sum(amount) from transaction where month = 本月)为80元,而小老虎此时正好在外面胡吃海喝后在收银台买单,消费1000元,即新增了一条1000元的消费记录(insert transaction … ),并提交了事务,随后小老虎的母老虎将小老虎当月信用卡消费的明细打印到A4纸上,却发现消费总额为1080元,小老虎的母老虎很诧异,以为出现了幻觉,幻读就这样产生了。当隔离级别设置为Repeatable read时,可以避免不可重复读,但会出现幻读。注:MySQL的默认隔离级别就是Repeatable read。
出现上述情况,即我们所说的可重复读,两个并发的事务,“事务A:母老虎查询”、“事务B:小老虎转账”,事务A事先读取了数据,事务B紧接了更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变。
Serializable 序列化
Serializable是最高的事务隔离级别,同时代价也花费最高,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻像读。
PS:
不可重复读和幻读的区别
当然, 从总的结果来看, 似乎两者都表现为两次读取的结果不一致.
但如果你从控制的角度来看, 两者的区别就比较大
对于前者, 只需要锁住满足条件的记录
对于后者, 要锁住满足条件及其相近的记录
-----------------------------------------------------------
我这么理解是否可以?
避免不可重复读需要锁行就行
避免幻影读则需要锁表
数据库事务的隔离级别(三浅一深,秒懂!!!)相关推荐
- 「DB」数据库事务的隔离级别
2019独角兽企业重金招聘Python工程师标准>>> 数据库事务的隔离级别 讲事务的隔离级别之前,先来介绍一下数据库事务的几个特性: (1)原子性 最基本的特性,意思是在一个事务内 ...
- MYSQL数据库事务的隔离级别(详解)
一.概述 数据库事务的隔离级别分为四种:(后面为解决的问题,结合下文案例深入理解) 1.读未提交(Read Uncommited)事务1修改的数据被事务2给回滚了 2.读已提交(Read Commit ...
- 数据库事务、隔离级别及其应用
数据库事务.隔离级别及其应用 一.数据库事务 事务(Transaction):是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,sql se ...
- 数据库---事务的隔离级别
首先,我们下面说的数据库事务,都是使用INNODB引擎的结果. MYISAM是没有事务的,也就没有下面这些说法. 1.数据库事务的四大特性: 原子性:事务包含的所有数据库操作要么全部成功,要不全部失败 ...
- mysql数据 锁 隔离级别_MySQL数据库事务各隔离级别加锁情况--read uncommitted篇
1.目的 1.1 合适人群 1.数据库事务特征我只是背过,并没有很深刻的理解. 2.数据库事务的隔离级别只是了解,并没有深刻理解,也没有在实际工作中体验使用过. 3.经常面试被人问起数据库加锁情况,一 ...
- mysql隔离级别加锁情况_MySQL数据库事务各隔离级别加锁情况--read committed amp;amp; MVCC...
上节回顾 上篇记录了我对MySQL 事务 隔离级别read uncommitted的理解. 这篇记录我对 MySQL 事务隔离级别 read committed & MVCC 的理解. 前言 ...
- 数据库 / 事务的隔离级别
一.什么是事务的隔离性? 两个人同时在一个画本上画画,过程中你一笔我一笔,那么最后最后画出来的一定是一个四不像,多个事务同时操作一个数据也会和上面的情况类似,所以为了让不同的事务之间相互不存在干扰,就 ...
- 隔离区别对待?如何捆绑?Java中的jdbc数据库事务及其隔离级别
文章目录 一.数据库事务简介 二.JDBC事务处理 三.事务的ACID属性 四.数据库的隔离级别 五.设置隔离级别 一.数据库事务简介 事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态. 事务 ...
- 数据库事务的隔离级别 (转)
.NET 提供的数据库事务隔离级别 System.Data.IsolationLevel 枚举用于指定连接的事务锁定行为,它包含如下枚举: 成员名称 说明 Chaos 无法改写隔离级别更高的事务中 ...
最新文章
- 佐治亚理工学院发文:不要迷信可解释性,小心被误导
- 记录一次与大神们的关于GAN应用于NLP的讨论 (后续)
- PHP正则贪婪/懒惰匹配模式
- 在八十年代末,比尔·盖茨和史蒂夫·巴尔默
- python字符串讲解
- cshtml中引用css_ASP.NET CoreMVC 中的控制器
- java bitset_Java BitSet hashCode()方法及示例
- go 计算文件sha-256_Kubernetes入门实践--部署运行Go项目
- Ubuntu 使用 Smina 对接教程
- Android:复杂listview条目
- 复试导师问题——前沿科技
- 如何有效提升软件测试质量?
- 如何满足python安装需求升级win7到SP1版本
- Android11 强制所有APP 横屏显示
- October CMS - 快速入门 2 基本概念
- Centos 7下PCIe Bus Error: severity=Corrected, type=Data Link Layer解决方案
- IT经济合同的工程量清单计价技巧
- 联通沃云 服务器使用点滴
- 第三批更新鸿蒙系统,emui11第三批更新名单-emui11第三批更新名单介绍 - 系统家园...
- 编译器整数除法的优化
热门文章
- 【译】使用python创建一个简单的restful风格的webservice应用
- 传统IDC部署网站10
- 红外线人体测温计方案/APP/芯片/PCBA
- 举例解析条件极值解法——高等数学
- 动态建立Vxlan隧道实现租户访问外网实验配置(分布式网关单租户多子网场景)
- 中国传媒大学计算机系湖北分数线,中国传媒大学历年录取分数线多少及各省最低投档线统计表...
- JS 计算外出办事时间(按照一天工作八小时制)
- 淘宝反作弊系统的个人理解
- 大数据常用shell脚本之kf脚本
- Android:从简历到offer直通车,跳槽大厂必备宝典,android开发环境页面设计