最近在看高性能MYSQL一书,所以对其进行例子分析已巩固自己的印象

  数据库的事务操作其实就是一组原子性的操作,要么全部操作成功,要么全部操作失败。

  

  比如说我需要对外销售1张电影票,且登记一下销售信息到另一个表,至少需要以下3个步骤

  1.查询电影票数量是否满足销售1张电影票 SELECT remain_count FROM cinema WHERE film_id = 123456789;

  2.更新电影票数量 UPDATE remain_count = remain_count -1 FROM cinema WHERE film_id=123456789;

  3.插入销售信息   INSERT  INTO sell_mes(id ,mes) values(id,mes);

  试想一下如果我们其中的一步被出错了或者被其他操作打乱就很容易出现问题。比如说有两个销售系统A,B在销售同样的票,此时票只剩下1张,A接到订单要售出一张票,他查看电影票的数量大于1,于是要售出的时候,也就是在第一步执行完毕执行第二步的时候,B也接到订单,也看到余票大于1,B也要售出1张票。此时就出现了余票只有1张却售出两张的荒唐的情况出现。

  所以一个良好的系统是需要通过ACID测试,至于ACID是什么,就自行百度吧,这篇博文讲的是隔离性的隔离级别以及例子

  而事务的隔离级别有四种,隔离级别高的数据库的可靠性高,但并发量低,而隔离级别低的数据库可靠性低,但并发量高,系统开销小

  

  1.READ UNCIMMITTED(未提交读)

  事务中的修改,即使没有提交,其他事务也可以看得到,比如说上面的两步这种现象就叫做脏读,这种隔离级别会引起很多问题,如无必要,不要随便使用

  例子:还是售票系统,小明和小花是售票员,他们分别是两个不同窗口的员工,现在售票系统只剩下3张票,此时A来小华这里买3张票,B来小明买票,小华查到余票还有就给接了订单,就要执行第三步的时候,小明接到B的请求查询有没有余票。看到小华卖出了3张票,于是拒绝卖票。但是小华系统出了问题,第三步执行失败,数据库为保证原子性,数据进行了回滚,也就是说一张票都没卖出去。

  总结:这就是事务还没提交,而别的事务可以看到他其中修改的数据的后果,也就是脏读。

  

  2.READ COMMITTED(提交读)

  大多数数据库系统的默认隔离级别是READ COMMITTED,这种隔离级别就是一个事务的开始,只能看到已经完成的事务的结果,正在执行的,是无法被其他事务看到的。这种级别会出现读取旧数据的现象

  例子:还是小明小华销售员,余票3张,A来小华那里请求3张订票单,小华接受订单,要卖出3张票,上面的销售步骤执行中的时候,B也来小明那里买票,由于小华的销售事务执行到一半,小明事务没有看到小华的事务执行,读到的票数是3,准备接受订单的时候,小华的销售事务完成了,此时小明的系统变成显示0张票,小明刚想按下鼠标点击接受订单的手又连忙缩了回去。

  总结:这就是小华的事务执行到一半,而小明看不到他执行的操作,所以看到的是旧数据,也就是无效的数据

  3.REPEATABLE READ(可重复读)

  REPEATABLE READ解决了脏读的问题,该级别保证了每行的记录的结果是一致的,也就是上面说的读了旧数据的问题,但是却无法解决另一个问题,幻行,顾名思义就是突然蹦出来的行数据。指的就是某个事务在读取某个范围的数据,但是另一个事务又向这个范围的数据去插入数据,导致多次读取的时候,数据的行数不一致。

  例子:销售部门有规定,如果销售记录低于规定的值,要扣工资,此时经理在后端控制台查看了一下小明的销售记录,发现销售记录达不到规定的次数,心里暗喜,准备打印好销售清单,理直气壮和小明提出,没想到打印出来的时候发现销售清单里面销售数量增多了几条,刚刚好达到要求,气的经理撕了清单纸。原来是小明在就要打印的瞬间卖出了几张票,因此避过了减工资的血光之灾。

  总结:虽然读取同一条数据可以保证一致性,但是却不能保证没有插入新的数据

  4.SERIALIZABLE(可串行化)

  SERIALIZABLE是最高的隔离级别,它通过强制事务串行执行(注意是串行),避免了前面的幻读情况,由于他大量加上锁,导致大量的请求超时,因此性能会比较底下,再特别需要数据一致性且并发量不需要那么大的时候才可能考虑这个隔离级别

转载于:https://www.cnblogs.com/s-b-b/p/5845096.html

数据库的四种隔离级别相关推荐

  1. 数据库的四种隔离级别及对应解决的脏读、不可重复读、幻读问题

    数据库的四种隔离级别 数据库事务的隔离级别有4种,由低到高分别为Read uncommitted .Read committed .Repeatable read .Serializable .而且, ...

  2. 【数据库的四种隔离级别】

    在关系型数据库中,隔离级别是指多个事务并发执行时,彼此之间的隔离程度.数据库的四种隔离级别如下: 1.读未提交(Read Uncommitted): 最低级别的隔离级别,一个事务可以读取到另一个事务未 ...

  3. MySQL数据库的四种隔离级别

    一.首先介绍几个概念: 1,脏读: 又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改但是还未提交,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改并提交,这就导致了T2所读取到的 ...

  4. 一文搞懂数据库的四种隔离级别(建议收藏)

    文章转载自老周聊架构,侵删!!! 一.什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全 ...

  5. 数据库的脏读、不可重复读、幻读以及四种隔离级别

    一.数据库的脏读.不可重复读和幻读 1.脏读: (读取了未提交的新事物,然后被回滚了) 事务A读取了事务B中尚未提交的数据.如果事务B回滚,则A读取使用了错误的数据. 比如我给你转了100万,但是我还 ...

  6. 数据库(Mysql)的四种隔离级别

    数据库事务的隔离级别有4种,由低到高分别为Read uncommitted .Read committed .Repeatable read .Serializable .而且,在事务的并发操作中可能 ...

  7. 数据库难点:脏读、幻读、不可重复读与四种隔离级别

    目录 前言 一.什么是事务? 二.事务的ACID特性 (1)原子性 (2)一致性 (3)隔离性 (4)持久性 三.何为脏读,幻读,不可重复读? 四.四种隔离级别 前言 本章着重点是介绍:出现脏读.幻读 ...

  8. 数据库事务的四种隔离级别

    文章目录 1. 引言 2. 事务隔离级别 2.1 事务四种隔离级别 2.2 查看隔离级别 3. 脏读/幻读/不可重复读 3.1 脏读 3.2 不可重复读 3.3 幻读 4. 总结: 1. 引言 &qu ...

  9. 这一篇让你真正理解Mysql的四种隔离级别

    什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...

  10. 温故而知新:MySQL 四种隔离级别,你还对答如流吗?

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 游泳的石头 来源 | https://www.jianshu.com/p/8d73 ...

最新文章

  1. python读取pdf表格_【Python 库】解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比...
  2. kettle 遇到 解决Incorrect integer value: '' for column 'id' at row 1 完美解决-费元星
  3. OpenCV YOLO DNN(yolo_object_detection)
  4. springboot+mybatis+thymeleaf项目搭建及前后端交互
  5. mysql test数据库_mysql数据库test
  6. [转载] Java复制对象与集合工具类
  7. 第二十节:一个缺失已久的特性 — module模块
  8. 解决重启centos后resolv.conf总被清空的问题
  9. httpd 服务的两个节点的HA
  10. 矩阵分解在推荐系统中的应用:NMF和经典SVD实战
  11. 浅谈集群、分布式、微服务的异同
  12. DLNA的使用-天翼高清电视机顶盒镜像投屏
  13. 【常见的检索源期刊】SCI+EI(核心)+ISTP+CSSCI+SSCI+AHCI简介
  14. [开源] PLC梯形图转指令表的算法源代码
  15. SQL Server 修改字段名
  16. tf.where()【能懂版】
  17. 【转】预装Win8/8.1 中文版系统升级为专业版或专业版含媒体中心版的简单方法...
  18. 简单的JsonParser(Java)
  19. 得到QB的20种方法
  20. 零基础HTML入门教程(11)--初识VSCode

热门文章

  1. 子空间的投影矩阵推导过程及其性质
  2. anti-wrinkle_Anti-wrinkle是什么意思
  3. 您的项目已获得 1000 枚 Star !
  4. 曙光服务器面板显示感叹号,磁盘阵列和磁带库面板感叹号灯橙色
  5. TYUT太原理工大学2022需求工程考试选择题背诵版
  6. linux c蜂鸣器驱动程序,嵌入式Linux设备驱动程序设计——蜂鸣器驱动程序
  7. 网吧服务器系统是怎么弄的,网吧无盘服务器系统的安装及设置
  8. vue中yarn install报错:info There appears to be trouble with your network connection. Retrying…
  9. SAPnbsp;BORnbsp;--nbsp;…
  10. 从零开始内网渗透学习