数据库事务的隔离级别

数据库事务的隔离级别有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:

不可重复读和幻读的区别

当然,   从总的结果来看,   似乎两者都表现为两次读取的结果不一致.

但如果你从控制的角度来看,   两者的区别就比较大
对于前者,   只需要锁住满足条件的记录
对于后者,   要锁住满足条件及其相近的记录

-----------------------------------------------------------

我这么理解是否可以?
避免不可重复读需要锁行就行
避免幻影读则需要锁表

数据库事务的隔离级别(三浅一深,秒懂!!!)相关推荐

  1. 「DB」数据库事务的隔离级别

    2019独角兽企业重金招聘Python工程师标准>>> 数据库事务的隔离级别 讲事务的隔离级别之前,先来介绍一下数据库事务的几个特性: (1)原子性 最基本的特性,意思是在一个事务内 ...

  2. MYSQL数据库事务的隔离级别(详解)

    一.概述 数据库事务的隔离级别分为四种:(后面为解决的问题,结合下文案例深入理解) 1.读未提交(Read Uncommited)事务1修改的数据被事务2给回滚了 2.读已提交(Read Commit ...

  3. 数据库事务、隔离级别及其应用

    数据库事务.隔离级别及其应用 一.数据库事务 事务(Transaction):是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,sql se ...

  4. 数据库---事务的隔离级别

    首先,我们下面说的数据库事务,都是使用INNODB引擎的结果. MYISAM是没有事务的,也就没有下面这些说法. 1.数据库事务的四大特性: 原子性:事务包含的所有数据库操作要么全部成功,要不全部失败 ...

  5. mysql数据 锁 隔离级别_MySQL数据库事务各隔离级别加锁情况--read uncommitted篇

    1.目的 1.1 合适人群 1.数据库事务特征我只是背过,并没有很深刻的理解. 2.数据库事务的隔离级别只是了解,并没有深刻理解,也没有在实际工作中体验使用过. 3.经常面试被人问起数据库加锁情况,一 ...

  6. mysql隔离级别加锁情况_MySQL数据库事务各隔离级别加锁情况--read committed amp;amp; MVCC...

    上节回顾 上篇记录了我对MySQL 事务 隔离级别read uncommitted的理解. 这篇记录我对 MySQL 事务隔离级别 read committed & MVCC 的理解. 前言 ...

  7. 数据库 / 事务的隔离级别

    一.什么是事务的隔离性? 两个人同时在一个画本上画画,过程中你一笔我一笔,那么最后最后画出来的一定是一个四不像,多个事务同时操作一个数据也会和上面的情况类似,所以为了让不同的事务之间相互不存在干扰,就 ...

  8. 隔离区别对待?如何捆绑?Java中的jdbc数据库事务及其隔离级别

    文章目录 一.数据库事务简介 二.JDBC事务处理 三.事务的ACID属性 四.数据库的隔离级别 五.设置隔离级别 一.数据库事务简介 事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态. 事务 ...

  9. 数据库事务的隔离级别 (转)

    .NET 提供的数据库事务隔离级别 System.Data.IsolationLevel 枚举用于指定连接的事务锁定行为,它包含如下枚举:   成员名称 说明 Chaos 无法改写隔离级别更高的事务中 ...

最新文章

  1. 佐治亚理工学院发文:不要迷信可解释性,小心被误导
  2. 记录一次与大神们的关于GAN应用于NLP的讨论 (后续)
  3. PHP正则贪婪/懒惰匹配模式
  4. 在八十年代末,比尔·盖茨和史蒂夫·巴尔默
  5. python字符串讲解
  6. cshtml中引用css_ASP.NET CoreMVC 中的控制器
  7. java bitset_Java BitSet hashCode()方法及示例
  8. go 计算文件sha-256_Kubernetes入门实践--部署运行Go项目
  9. Ubuntu 使用 Smina 对接教程
  10. Android:复杂listview条目
  11. 复试导师问题——前沿科技
  12. 如何有效提升软件测试质量?
  13. 如何满足python安装需求升级win7到SP1版本
  14. Android11 强制所有APP 横屏显示
  15. October CMS - 快速入门 2 基本概念
  16. Centos 7下PCIe Bus Error: severity=Corrected, type=Data Link Layer解决方案
  17. IT经济合同的工程量清单计价技巧
  18. 联通沃云 服务器使用点滴
  19. 第三批更新鸿蒙系统,emui11第三批更新名单-emui11第三批更新名单介绍 - 系统家园...
  20. 编译器整数除法的优化

热门文章

  1. 【译】使用python创建一个简单的restful风格的webservice应用
  2. 传统IDC部署网站10
  3. 红外线人体测温计方案/APP/芯片/PCBA
  4. 举例解析条件极值解法——高等数学
  5. 动态建立Vxlan隧道实现租户访问外网实验配置(分布式网关单租户多子网场景)
  6. 中国传媒大学计算机系湖北分数线,中国传媒大学历年录取分数线多少及各省最低投档线统计表...
  7. JS 计算外出办事时间(按照一天工作八小时制)
  8. 淘宝反作弊系统的个人理解
  9. 大数据常用shell脚本之kf脚本
  10. Android:从简历到offer直通车,跳槽大厂必备宝典,android开发环境页面设计