数据库事务隔离级别

PottyHarry PottyHarry     2022-10-26     728

关键词:

数据库事务隔离级别

 

        数据库事务的隔离级别有4个,由低到高依次为Read uncommitted 、Read committed 、Repeatable read 、Serializable ,这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几类问题。

                                √: 可能出现    ×: 不会出现

  脏读 不可重复读 幻读
Read uncommitted
Read committed ×
Repeatable read × ×
Serializable × × ×

关于read uncommitted方面
       今天下午一开始做的时候,一直不出现脏数据,后边重新理一遍,成功了,然后又花了半小时的时间
去尝试之前不出现脏数据的原因,之后一直都是脏数据,所以就不知道我之前到底是哪出了问题,下边贴
出成功后的操作图;
 
                      图1-1
 
                      图1-2
 
 
                      图1-3
 
        图1-1是我在第一个DOS系统下操作的命令,图1-2是在第二个DOS系统下操作的命令,而后再在第一个DOS
系统下操作图1-3的命令发现,读到了未提交的事务。
 
关于Read committed方面
       可以避免脏读,但不能避免不可重复读和幻读的情况
 
                  图2-1
 
                  图2-2
 
                  图2-3
       图2-1在DOS1下开启事务,并且查询当前reader表的数据,然后图2-2DOS2下修改数据,最后在
DOS1的事务下重新查询reader表的数据,发现ID=6的数据发生了变化,这就是在同一个事务下,两次
读取数据出现不一样的情况,即不可重复读。
 
关于repeatable read(可重复读)
       mysql默认的事务隔离级别,可以避免脏读、不可重复读的问题,因为MYSQL的储存引擎通过多
版本并发控制机制解决了幻读的问题,因此这个级别可以避免幻读了,以下是今天的测试:
 
                    图3-1
 
                    图3-2
 
                    图3-3
 
        图3-1在DOS1下开启事务,然后查询一下reader表数据,然后在DOS2下插入一条数据,再在DOS1中
查询reader表的数据,发现数据没有没有改变,说明没有幻读。
 
脏读、不可重复读、幻读概念:

1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个

事务也访问这个数据,然后使用了这个数据。

2. 不可重复读 :是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,

在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发

生了在一个事务内两次读到的数据是不一样的,因此称为是不 可重复读。例如,一个编辑人员两次读取同一文档,但在两次

读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果 只有在作者全部完成

编写后编辑人员才可以读取文档,则可以避免该问题。

3. 幻读 : 是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的

全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个

事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样。例如,一个编辑人员更改作者提交的文档,但当生产部门

将其更改内容合并到该文档的主复本时,发现作者已将未编辑的新材料添加到该文档中。 如果在编辑人员和生产部门完成对原始

文档的处理之前,任何人都不能将新材料添加到文档中,则可以避免该问题。

摘自:https://www.cnblogs.com/wuxiang/p/5477807.html
 
关于不可重复读、幻读,理解摘自贴吧:
不可重复读的重点是修改:
同样的条件, 你读取过的数据, 再次读取出来发现值不一样了
幻读的重点在于新增或者删除
同样的条件, 第1次和第2次读出来的记录数不一样
当然, 从总的结果来看, 似乎两者都表现为两次读取的结果不一致.
但如果你从控制的角度来看, 两者的区别就比较大
对于前者, 只需要锁住满足条件的记录
对于后者, 要锁住满足条件及其相近的记录
 
避免不可重复读需要锁行就行
避免幻影读则需要锁表
贴吧链接地址:https://bbs.csdn.net/topics/120024254
 
本文的参考链接:
http://blog.csdn.net/jiesa/article/details/51317164
 
 
 
 
 
 

隔离级别(代码片段)

...用(例如,脏读或幻读)的角度进行描述脏读:也就是当数据库的一个事务A正在使用一个数据但还没有提交,另外一个事务B也访问到了这个数据,还使用了这个数据,这就会导致事务B使用了事务A没有提交之前的数据。不可重... 查看详情

spring事务的隔离级别

...这是一个PlatfromTransactionManager 默认的隔离级别,使用数据库默认的事务隔离级别. 另外四个与JDBC的隔离级别相对应:2. ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它允许令外一个事务可以看到这个事务未提交的数... 查看详情

2.事务隔离级别

...低,安全性依次提高。2.1事务隔离的实现原理在实现上,数据库里面会创建一个视图,访问的时候以视图的逻辑结果为准。在“可重复读”隔离级 查看详情

数据库事务——事务隔离级别(代码片段)

文章目录数据库的事务隔离级别MySQL的事务隔离级别的实现1.READUNCOMMITTED&READCOMMITTED:2.REPEATABLEREAD:3.SERIALIZABLE:MySQL事务小细节事务可以嵌套吗?如何实现可重复读?如何解决幻读问题?MySQL事务的回滚... 查看详情

数据库事务——事务隔离级别(代码片段)

文章目录数据库的事务隔离级别MySQL的事务隔离级别的实现1.READUNCOMMITTED&READCOMMITTED:2.REPEATABLEREAD:3.SERIALIZABLE:MySQL事务小细节事务可以嵌套吗?如何实现可重复读?如何解决幻读问题?MySQL事务的回滚... 查看详情

数据库事务隔离级别

数据库事务隔离级别     数据库事务的隔离级别有4个,由低到高依次为Readuncommitted 、Readcommitted 、Repeatableread 、Serializable ,这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几... 查看详情

数据库事务隔离级别及传播行为

一、隔离级别:数据库事务的隔离级别有4个,由低到高依次为Readuncommitted、Readcommitted、Repeatableread、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。1.ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别... 查看详情

转载:事务的隔离级别

ORACLE数据库事务隔离级别事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度。两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:1、幻想读:事务T1读取一条指定where条件的语句,返回结... 查看详情

事务的隔离级别(代码片段)

...题就是:脏读现象!这种隔离级别是理论上的,大多数的数据库隔离级别都是二档起步*/读已提交读的时候事务还没有提交,后来事务B提交了,再读的结果不一样就是前后不一致意思不能动态读取/*事务A开启以后,只能读取事务... 查看详情

spring有几种事务隔离级别?

Spring中的事务隔离级别和数据库中的事务隔离级别稍有不同,以MySQL为例,MySQL的InnoDB引擎中的事务隔离级别有4种,而Spring中却包含了5种事务隔离级别。1.什么是事务隔离级别?事务隔离级别是对事务4大特性中隔... 查看详情

事务隔离级别

事务隔离级别       数据库并发操作存在的异常情况:1.更新丢失(Lostupdate): 两个事务都同时更新一行数据但是第二个事务却中途失败退出导致对数据两个修改都失效了这是系统没有执行任何锁操... 查看详情

弱隔离级别&事务并发问题

...了事务的最高隔离级别:可串行化。可串行化隔离意味着数据库保证事务的 查看详情

《spring设计思想-事务篇》-数据库隔离级别

0.前言数据库的事务隔离级别是关系型数据库事务的理论基础,本文将从资源互斥的角度从上到下依次进行阐释。1.数据库的事务隔离级别1.1事务的隔离级别,隔离的是什么?在阐述数据库事务的隔离级别时,我们首先... 查看详情

mysql事务的隔离级别

事务的隔离级别当数据库里有多个事务同时执行的时候,就可能会出现,幻读,脏读,不可重复读的问题,为了解决这些问题,就出现了隔离级别的概念。读未提交:别人改数据的事务尚未提交,我在我的事务中也能读到。读已... 查看详情

数据库事务的四大特性以及事务的隔离级别-与-spring事务传播机制&隔离级别

   本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。  如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:⑴原子性(Atomicity)  原子性是指事务包含的所... 查看详情

数据库事务四种隔离级别

在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。数据库事务的隔离级别有4个,由低到高依次为Readuncommitted(未授权读取、读未提交)、Readcommitted(授权读取、读提交)、Repeatableread(可重复读取)、... 查看详情

mysql事务隔离级别回顾

事务隔离级别是针对读数据库数据的一种规则。事务隔离级别是数据库属性不是事务属性。1.读未提交(readuncommited)可以读到其他事务修改未提交的数据。(有脏读,不可重复读,幻读)事务A读到了事务B更新后但未提交的数据... 查看详情

数据库的快照隔离级别(snapshotisolation)

隔离级别定义事务操作资源和更新数据的隔离程度,在SQLServer中,隔离级别只会影响读操作申请的共享锁,而不会影响写操作申请的互斥锁。隔离级别控制事务在执行读操作时:在读数据时是否使用共享锁,申请何种类型的隔离... 查看详情