数据库(Mysql)的四种隔离级别
数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读的问题。
脏读、不可重复读、幻象读概念说明:
脏读(Drity Read):某个事物已更新一份数据,另一个事物在此时都取了同一份数据,由于某些原因,前一个事物进行了回滚操作,走后一个事务所读取的数据就是不正确的
eg:老板要给程序员发工资,程序员的工资是3.6万/月。但是发工资时老板不小心按错了数字,按成3.9万/月,该钱已经打到程序员的户口,但是事务还没有提交,就在这时,程序员去查看自己这个月的工资,发现比往常多了3千元,以为涨工资了非常高兴。但是老板及时发现了不对,马上回滚差点就提交了的事务,将数字改成3.6万再提交。
不可重复读:指在一个事务内,多次读同一数据。在这个事务还没有执行结束,另外一个事务也访问该同一数据,那么在第一个事务中的两次读取数据之间,由于第二个事务的修改第一个事务两次读到的数据可能是不一样的,这样就发生了在一个事物内两次连续读到的数据是不一样的,这种情况被称为是不可重复读。
eg:程序员拿着信用卡去享受生活(卡里当然是只有3.6万),当他埋单时(程序员事务开启),收费系统事先检测到他的卡里有3.6万,就在这个时候!!程序员的妻子要把钱全部转出充当家用,并提交。当收费系统准备扣款时,再检测卡里的金额,发现已经没钱了(第二次检测金额当然要等待妻子转出金额事务提交完)。程序员就会很郁闷,明明卡里是有钱的…
Analyse:这就是读提交,若有事务对数据进行更新(UPDATE)操作时,读操作事务要等待这个更新操作事务提交后才能读取数据,可以解决脏读问题。但在这个事例中,出现了一个事务范围内两个相同的查询却返回了不同数据,这就是不可重复读。
幻象读:一个事务先后读取一个范围的记录,但两次读取的纪录数不同,我们称之为幻象读(两次执行同一条 select 语句会出现不同的结果,第二次读会增加一数据行,并没有说这两次执行是在同一个事务中)
幻读的理解:幻读,并不是说两次读取获取的结果集不同,幻读侧重的方面是某一次的 select 操作得到的结果所表征的数据状态无法支撑后续的业务操作。更为具体一些:select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入,此时就发生了幻读。
eg:程序员某一天去消费,花了2千元,然后他的妻子去查看他今天的消费记录(全表扫描FTS,妻子事务开启),看到确实是花了2千元,就在这个时候,程序员花了1万买了一部电脑,即新增INSERT了一条消费记录,并提交。当妻子打印程序员的消费记录清单时(妻子事务提交),发现花了1.2万元,似乎出现了幻觉,这就是幻读。
想要解决事物的脏读 不可重复读 幻读的问题就要不断提高事务的隔离级别
事务的隔离级别
- 隔离级别的概念
- 多个客户端操作时 ,各个客户端的事务之间应该是隔离的,相互独立的 , 不受影响的。
- 而如果多个事务操作同一批数据时,则需要设置不同的隔离级别 , 否则就会产生问题 。
- 我们先来了解一下四种隔离级别的名称 , 再来看看可能出现的问题
- 四种隔离级别
1 |
读未提交 |
read uncommitted |
2 |
读已提交 |
read committed |
3 |
可重复读 |
repeatable read |
4 |
串行化 |
serializable |
事务的四大特征(ACID) 一原持久隔离
- 原子性(atomicity)
- 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响
- 一致性(consistency)
- 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态
- 拿转账来说,假设张三和李四两者的钱加起来一共是2000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是2000,这就是事务的一致性
- 隔离性(isolcation)
- 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离
- 持久性(durability)
- 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作
数据库(Mysql)的四种隔离级别相关推荐
- 这一篇让你真正理解Mysql的四种隔离级别
什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...
- 真正理解 MySQL 的四种隔离级别
什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...
- mysql选择哪个隔离级别更好_深入理解Mysql的四种隔离级别
一.首先什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事 ...
- 真正理解Mysql的四种隔离级别
本文转自 https://www.jianshu.com/p/8d735db9c2c0 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也 ...
- MySQL的四种隔离级别
提示:以下是本篇文章正文内容,下面案例可供参考 一.三个概念 1,脏读: 又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改但是还未提交,然后事务T2读取该值,此后T1因为某种原因撤销对该值 ...
- 深入理解MySQL的四种隔离级别
深入理解MySQL的四种隔离级别[日期:2017-02-20] 来源:Linux社区 作者:Linux [字体:大 中 小]什么是事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个 ...
- 深入理解MySQL的四种隔离级别及加锁实现原理
一.首先什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事 ...
- 数据库事务的四种隔离级别
文章目录 1. 引言 2. 事务隔离级别 2.1 事务四种隔离级别 2.2 查看隔离级别 3. 脏读/幻读/不可重复读 3.1 脏读 3.2 不可重复读 3.3 幻读 4. 总结: 1. 引言 &qu ...
- Mysql学习总结(58)——深入理解Mysql的四种隔离级别
一.前言 开发工作中我们会使用到事务,那你们知道事务又分哪几种吗?MYSQL标准定义了4类隔离级别,用来限定事务内外的哪些改变是可见的,哪些是不可见的.低的隔离级一般支持更高的并发处理,并拥有更低的系 ...
- Mysql 的四种隔离级别
测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 原子性(Atomicity) 事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在 ...
最新文章
- 兔子不吃窝边草,跳槽不跳窝边槽。。。
- 男人一辈子就喜欢一种类型的女人,至死不渝从一而终!
- table表格细边框
- 新添加磁盘分区后,找不到新分区
- Spark初识-弹性分布式数据集RDD
- tomcat 配置https安全认证协议报错解决方案
- Awesomplete 屌爆了
- 74HC/LS/HCT/F系列芯片的区别
- 基于docker的wekan部署
- OpenStreetMap 2020年全球数据导入benchmark
- SD卡内存卡修复工具哪个好?4款工具对比测评
- oracle wallet java_使用Oracle sqlplus Instant客户端访问Oracle Wallet
- 面试官:你对MySQL中的索引了解多少?
- CCIE重认证--350-401-补充题库-也是必须的哟
- 如何利用互联网了解你的客户
- JQuery【选择器】
- 各大IT公司工资一览
- Dos脚本调用打印机用户界面及配置
- Barsetto百胜图BAC731B智能胶囊咖啡机测评,醇香相伴随性生活
- 把尿神器(为了小宝宝。。。。)