首页 > 编程知识 正文

事务隔离性特征,四个隔离级别

时间:2023-05-05 11:58:39 阅读:47121 作者:4086

1 .对于并发事务处理问题串行处理,并发事务处理可以大大增加数据库资源的利用率,提高数据库系统的事务吞吐量,支持更多的用户。 但是,并发事务主要存在以下几个问题:

脏读一个事务读取另一个未提交事务的数据不可重复读一个事务读取了一个数据发现读取的数据已更改,或者某些记录已在“幻像读取”(Phantom Reads )中删除。 一个事务在同一搜索条件下重新读取以前检索的数据,但发现其他事务插入了满足查询条件的新数据)2.事务隔离级别“脏读”、“不可重复读” 实际上,这是一个数据库读取完整性问题,需要提供一定的事务隔离。数据库的事务隔离方式基本分为以下两种:

一种做法是在读取数据之前将其锁定,防止其他事务修改数据。 一种是在不运行任务时钟的情况下,通过一定的机制生成数据请求时间点的一致性数据http://www.Sina.com/(snapshot ),并使用该快照来匹配一定级别(语句级别或事务级别) 在用户看来,该技术是3http://www.Sina.com//(multiversionconcurrencycontrol,简称MVCC或MCC ),因为数据库看起来可以提供同一数据的多个版本这明显与“同步化”相矛盾,因为事务隔离实质上是使事务“序列化”到一定程度。 此外,不同的APP应用程序对读取一致性和事务隔离级别的要求也不同。 例如,许多APP应用程序可能对“不可重复读取”和“幻像读取”不敏感,并关心同时访问数据的能力。

为了解决“隔离”和“并发”矛盾,ISO/ANSI SQL92定义了四个事务隔离级别,每个级别的隔离程度不同,允许的副作用也不同。 APP应用程序可以根据自己的业务逻辑要求,选择不同的隔离级别来平衡“隔离”和“并发”矛盾。

数据库事务的四个隔离级别:读取未确认、读取已确认、可删除读取和可序列化。 以下通过事例逐一阐述事务隔离:

2.1读取未提交的事务。 顾名思义,一个事务可以读取另一个未提交的事务的数据。

事例:上司向程序员支付工资。 程序员的工资为3.6万/月。 但是,发薪日上司错误地按了数字,变成了3.9万/月。 那笔钱转到了程序员的账户上,但事务还没有交。 那时,程序员去查了自己这个月的工资,比平时多了三千元,觉得涨了工资,很高兴。 但是,上司很快就意识到了错误,马上将差点提交的事务回滚,将数字改为3.6万后提交。

分析:实际程序员这个月的工资还是3.6万,但程序员看到的是3.9万。 他看到的是上司还没有提交事务时的数据。 这是肮脏的读法。

怎么解决不洁的读法? 领先优势! 可以提出来解决不洁的读书问题。

2.2readcommittedreadcommitted顾名思义,即一个事务等待另一个事务提交,然后读取数据。

事例:程序员拿着信用卡去享受生活。 (卡里当然只有3.6万。 他埋单的时候)程序员事务接通时,资费系统事先检测出他卡里有3.6万。 就是这个时候。 程序员的妻子必须把钱全部拿出来供家庭用。 收费系统准备取现时,重新检查卡上的金额,发现钱不见了。 (第二次检查金额当然要等妻子转出金额事务提交完毕。 程序员会变得忧郁。 明明卡里有钱……

分析:这就是领先提交。 如果存在要更新(UPDATE )数据的事务,则在提交此更新操作事务之前,读事务无法读取数据。 可以解决脏领导的问题。 但是,在此实例中,一个事务范围内的两个相同查询返回不同的数据。 这是不能重复阅读的。

怎么解决不可再现的问题? 可重复读取!

2.3 Repeatable read重复读取是指开始读取数据时,事务启动时不允许进行更改操作

事例:程序员拿着信用卡享受生活。 (卡里当然只有3.6万。 (事务已启动,不允许对其他事务的UPDATE进行修改操作。)。 费用系统事先检测出他的卡里有3.6万。 此时,zjdxx无法转出金额了。 接下来可以用费用系统扣款。

分析:反复阅读可以解决不可重复的问题。 写到这里,需要知道的是,不能重复阅读的是修正,即支持UPDATE操作。 但是,也可能有幻读问题。 幻读问题是因为它支持插入插入操作而不是更新操作。

快照

事例:程序员有一天去消费,花了两千元。 然后zjdxx去查了他今天的消费记录。 (全表扫描FTS,妻子办公开),看到确实花了两千元,这个时候,程序员花了一万买了电脑。 也就是说,新的INSERT买了消费记录并提交了。 妻子打印程序员的消费记录清单时(提交妻子的事务),花了1.2万元,似乎出现了幻觉。 这就是幻读。

那么怎么解决幻读问题? 序列化!

2.4序列化串行

izable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

2.5 4种隔离级别的比较 隔离级别读数据一致性及允许的并发副作用读一致性脏读不可重复读幻读未提交读(Read uncommitted)最低级别,只能保证不读取物理上损坏的数据是是是已提交读(Read committed)语句级否是是可重复读(Repeatable Read)事务级否否是可序列化(Serializable)最高级别,事务级否否否

值得一提的是:大多数数据库默认的事务隔离级别是Read committed,比如Sql Server , Oracle。Mysql的默认隔离级别是Repeatable read。

参考:

https://www.cnblogs.com/ubuntu1/p/8999403.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。