数据库的四种隔离级别及对应解决的脏读、不可重复读、幻读问题
数据库的四种隔离级别
数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读。
脏读、不可重复读、幻读的概念说明
脏读:指当一个事务正在访问数据,并且对数据进行了修改,而这种数据还没有提交到数据库中,这时,另外一个事务也访问这个数据(修改后的还没提交的数据),然后使用了这个数据。因为这个数据还没有提交那么另外一个事务读取到的这个数据我们称之为脏数据。依据脏数据所做的操作肯能是不正确的。
换句话说:脏读是指一个事务在处理数据的过程中,读取到另一个未提交事务的数据。(事务可能回滚,也就是说未提交的数据可能并不会修改)
不可重复读:不可重复读是指对于数据库中的某个数据,一个事务范围内的多次查询却返回了不同的结果,这是由于在查询过程中,数据被另外一个事务修改并提交了。
不可重复读和脏读的区别是,脏读读取到的是一个未提交的数据,而不可重复读读取到的是前一个事务提交的数据。
而不可重复读在一些情况也并不影响数据的正确性,比如需要多次查询的数据也是要以最后一次查询到的数据为主。
幻读:幻读是事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。
幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。
不可重复读和幻读是初学者不易分清的概念,我也是看了详细的解读才明白的,总的来说,解决不可重复读的方法是 锁行,解决幻读的方式是 锁表。
总结
- 为什么会出现“脏读”?因为没有“select”操作没有规矩。
- 为什么会出现“不可重复读”?因为“update”操作没有规矩。
- 为什么会出现“幻读”?因为“insert”和“delete”操作没有规矩。
- “读未提(Read Uncommitted)”能预防啥?啥都预防不了。
- “读提交(Read Committed)”能预防啥?使用“快照读(Snapshot Read)”,避免“脏读”,但是可能出现“不可重复读”和“幻读”。
- “可重复读(Repeated Red)”能预防啥?使用“快照读(Snapshot Read)”,锁住被读取记录,避免出现“脏读”、-“不可重复读”,但是可能出现“幻读”。
- “串行化(Serializable)”能预防啥?排排坐,吃果果,有效避免“脏读”、“不可重复读”、“幻读”,不过效果谁用谁知道
数据更新问题(2类)
1. 第一类丢失更新(回滚丢失)
在事务A期间,事务B对数据进行了更新;在事务A撤销之后,覆盖了事务B已经提交的数据。
2. 第二类丢失更新(覆盖丢失)
在事务A期间,事务B对数据进行了更新;在事务A提交之后,覆盖了事务B已经提交的数据。
数据库的四种隔离级别及对应解决的脏读、不可重复读、幻读问题相关推荐
- 【数据库的四种隔离级别】
在关系型数据库中,隔离级别是指多个事务并发执行时,彼此之间的隔离程度.数据库的四种隔离级别如下: 1.读未提交(Read Uncommitted): 最低级别的隔离级别,一个事务可以读取到另一个事务未 ...
- MySQL数据库的四种隔离级别
一.首先介绍几个概念: 1,脏读: 又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改但是还未提交,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改并提交,这就导致了T2所读取到的 ...
- 一文搞懂数据库的四种隔离级别(建议收藏)
文章转载自老周聊架构,侵删!!! 一.什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全 ...
- mysql 脏读 不可重复读 幻读_mysql事务隔离级别/脏读/不可重复读/幻读详解
一.四种事务隔离级别 1.1read uncommitted 读未提交 即:事务A可以读取到事务B已修改但未提交的数据. 除非是文章阅读量,每次+1这种无关痛痒的场景,一般业务系统没有人会使用该事务隔 ...
- mysql不可重复读和重复读_MySql隔离级别:RU / RC / RR / S + 脏读 / 不可重复读 / 幻读 / 可重复读...
MySQL 事务 本文所说的 MySQL 事务都是指在 InnoDB 引擎下,MyISAM 引擎是不支持事务的. 数据库事务指的是一组数据操作,事务内的操作要么就是全部成功,要么就是全部失败,什么都不 ...
- 数据库(Mysql)的四种隔离级别
数据库事务的隔离级别有4种,由低到高分别为Read uncommitted .Read committed .Repeatable read .Serializable .而且,在事务的并发操作中可能 ...
- 数据库的脏读、不可重复读、幻读以及四种隔离级别
一.数据库的脏读.不可重复读和幻读 1.脏读: (读取了未提交的新事物,然后被回滚了) 事务A读取了事务B中尚未提交的数据.如果事务B回滚,则A读取使用了错误的数据. 比如我给你转了100万,但是我还 ...
- MySQL(六)事物(ADID,四种隔离级别)(七)索引(索引测试,原则)
6-事物 文章目录 6-事物 1,执行事物 2,模拟事务 3,事务的四种隔离级别 7-索引 7.1, 索引的分类 7.2,测试索引 插入100万数据 测试查询耗时 7.3,索引原则 事务原则:ACID ...
- mysql mvcc 隔离级别_关于 Mysql 四种隔离级别中 Lock 和 MVCC 的关系
读写锁 共享锁(share lock)| 读锁(read lock) 读锁是共享的,或者说是相互不阻塞的.多个客户在同一时刻可以同时读取同一个资源,而互不干扰 SELECT ... LOCK IN S ...
最新文章
- 普华永道:AI规模化应用,基础知识先行
- Android TouchEvent 分发流程
- 【Cubase】Cubase 量化设置 ( 量化预置 | 长度量化 | 快捷键设置 | 量化开头 | 量化 MIDI 事件结尾 | 量化 MIDI 事件长度 )
- 【Leetcode | easy】回文数
- 关闭aslr oracle,地址空间布局随机化 (Address Space Layout Randomization, ASLR)
- 【发现】iframe 放入 Updatepanel 中没有作用,整页总要闪烁一次的解决办法
- MongoDB 学习-Windows环境搭建(一)
- 续php的一些基本概念
- 算法设计与分析--01背包问题(动态规划法解决)
- hive中删除表的错误Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException...
- (一)vmware中Linux共享文件夹设置
- wifi连接上不能上网怎么办服务器无响应,​wifi连接上不能上网是怎么回事,看完你就恍然大悟了...
- conan入门(二十六):使用make编译erpc/erpcgen(makefile)
- kali工具之Beef
- 炎颂科技管理系统软件——助力商协会“互联网+”之路
- turtle库基本介绍
- Oracle Primavera P6 文档管理与文件查看(Autovue及Outsidein)
- u盘linux 修复grub,ubuntu修复grub,u盘引导问题
- python中左对齐问题_[Python] print中的左右对齐问题
- latex插入参考文献小技巧