事务隔离级别区分,未提交读,提交读,可重复读

事务隔离超通俗好懂的的讲解

按照隔离的级别由低到高,越高的隔离,效率越差

  0)、DEFAULT 默认隔离级别,由数据库的数据隔离级别确定隔离级别
       1)、READ_UNCOMMIYTTED 都未提交的 级别最低
             允许别的事务,去读取这个事务为提交之前的数据
             缺点:可能会造成脏读、幻读、不可重复读。
             例子讲解:店家对1000元商品进行降价500处理,数据更改,但未提交事务;
             然后你查到降价将货物并提交订单; 可是商家由于操作异常,数据回滚,返回原价格1000;
             这样,在店家那边是没有操作成功的,可是在你这里却得到了降价货物订单。
             可理解为:外层更改价格的事务拉长执行,在执行之中出现提交订单的事情,你读了别人正在处理的数据。
              
      2)、READ_COMMITTED 读已提交级别    
             案例讲解:你原本查询商品价格为500,第二次为了证明真的降价了再查却发现并没有降价。

   缺点:两次读的都是真的(不脏读) 可是却存在不可重复
                    可以理解为: 你两次查询为一次事务,将此事务拉长;
                    在此事务中间,有更改价格的操作,可能执行了多次,可是在这个多次执行修改中你无法插进去查一次;
                    只能等他更改完(中间事务结束)才能进行下一次查询,你读的期间别人插进来对数据操作了。
       两件事务出现了交集。

  3)、REPEATABLE_READ 可重复读    事务是多次读取,得到的相同的值。

   缺点: 会出现幻读
                  即该事务执行期间,不允许其他事务对该事务数据进行操作,保证该事物中多次对数据的查询结果一致。
             就是你多次查询的这个事务包含多条数据,为了保证读取的一致性,可重复读(REPEATABLE_READ)将使用的数据锁起来不让别人用。
                  
       4)、SERIALIZABLE 串行化读 将事务排序,逐个执行事务提交了之后才会继续执行下一个事务。

   缺点:都隔离开了,效率慢  
                 就是上面的可重复读(REPEATABLE_READ)是将使用的数据范围锁起来不让别人用,而这里是将涉及数据的表全都锁起来,不允许别人操作。
                 这个事务的执行中,别的事务连在旁边看的机会都没有,完全不会有影响,你读的时候别人看不到,隔离开,单独执行
      整个事务排队执行
 
本文为个人学习总结,可能会存在一些理解错误,或误差,还请路过各位指点批评。

时间: 2024-10-11 07:46:34

事务隔离级别区分,未提交读,提交读,可重复读的相关文章

MySQL事务隔离级别为"REPEATABLE-READ"下的"幻读"现象

MySQL事务隔离级别为"REPEATABLE-READ"下的"幻读"现象 关于mysql命令行中事务控制的语句见该文章:http://my.oschina.net/xinxingegeya/blog/296459 本片参考文章:http://blog.csdn.net/jiao_fuyou/article/details/16368827 http://www.cnblogs.com/hancf/archive/2012/08/28/2660422.html my

mysql中的事务隔离级别及可重复读读提交详细分析(mvcc多版本控制/undo log)

一.事物隔离级别 读未提交(read uncommitted)是指,一个事务还没提交时,它做的变更就能被别的事务看到.通俗理解,别人改数据的事务尚未提交,我在我的事务中也能读到. 读提交(read committed)是指,一个事务提交之后,它做的变更才会被其他事务看到.通俗理解,别人改数据的事务已经提交,我在我的事务中才能读到. 可重复读(repeatable read)是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据 是一致的.当然在可重复读隔离级别下,未提交变更对其他事

Atitit.数据库事务隔离级别 attilax 总结

Atitit.数据库事务隔离级别 1. 事务隔离级别的作用 1 2. 在的隔离级别 2 3. 常见数据库的默认管理级别 3 1. 事务隔离级别的作用 较低的隔离级别可以增强许多用户同时访问数据的能力,但也增加了用户可能遇到的并发副作用(例如脏读或丢失更新)的数量.相反,较高的隔离级别减少了用户 可能遇到的并发副作用的类型,但需要更多的系统资源,并增加了一个事务阻塞其他事务的可能性.应平衡应用程序的数据完整性要求与每个隔离级别的开销,在此 基础上选择相应的隔离级别.最高隔离级别(可序列化)保证事务

深入理解mysql事务隔离级别

mysql支持4种事务隔离级别分别为 Read Uncommitted 读未提交 Read Committed 读已提交 Repeatable Read 可重复读 *注意这个概念容易混,下面细说 Serializable 串行化事务操作 1.Read Uncommitted 读未提交 事务隔离级别设为Read Uncommitted时,能查询到其他事务已修改但尚未提交的数据,若后续其他事务发生回滚,则造成了脏读.是最低的事务隔离级别 2.Read Committed 读已提交 事务隔离级别设为R

脏读|不可重复度|幻读的理解以及Spring定义的五种事务隔离级别

在Spring中定义了5中不同的事务隔离级别. 1. ISOLATION_DEFAULT(一般情况下使用这种配置既可) 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别. 2. ISOLATION_READ_UNCOMMITTED 这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据.这种隔离级别会产生脏读,不可重复读和幻像读. (大部分数据库缺省的事物隔离级别都不会出现这种状况) 3. ISOLATION_READ_CO

事务隔离级别中可重复读与幻读

前言 中秋刚过,大家是不是还没充中秋的假日里缓过来?三天假期里,我深入窥探了Innodb中可重复读与幻读,非常有意思,分享给大家,作为大家工作前的开胃小菜,希望有所帮助. 每次谈到数据库的事务隔离级别,大家一定会看到这张表. 其中,可重复读这个隔离级别,有效地防止了脏读和不可重复读,但仍然可能发生幻读,可能发生幻读就表示可重复读这个隔离级别防不住幻读吗? 我不管从数据库方面的教科书还是一些网络教程上,经常看到RR级别是可以重复读的,但是无法解决幻读,只有可串行化(Serializable)才能解

事务隔离级别中可重复读与幻读的恩恩怨怨

前言 中秋刚过,大家是不是还没充中秋的假日里缓过来?三天假期里,我深入窥探了Innodb中可重复读与幻读,非常有意思,分享给大家,作为大家工作前的开胃小菜,希望有所帮助. 每次谈到数据库的事务隔离级别,大家一定会看到这张表. 其中,可重复读这个隔离级别,有效地防止了脏读和不可重复读,但仍然可能发生幻读,可能发生幻读就表示可重复读这个隔离级别防不住幻读吗? 我不管从数据库方面的教科书还是一些网络教程上,经常看到RR级别是可以重复读的,但是无法解决幻读,只有可串行化(Serializable)才能解

[MySQL]对于事务并发处理带来的问题,脏读、不可重复读、幻读的理解与数据库事务隔离级别 - 分析脏读 & 不可重复读 & 幻读

刚开始写博客.. 写的太low. 1.数据库的两种读,每种读读的数据版本不一样,所以也称为MVCC,即多版本并发控制 a) 快照读 select * from where xxx  这种形式的都是快照读. b) 当前读 update , insert ,delete ,select xx from xx for update ,  in share mode 都是当前读 当前读会等待,不会返回数据的历史版本 2.mvcc 的实现原理 mvcc是基于read view.活跃事务列表 做的,以后的文

数据库事务隔离级别、脏读、重复读、不可重复读、幻读

数据库事务四种隔离级别 1.Read Uncommitted(读未提交) :事务中的修改,即使没有提交,其他事务也可以看得到,会导致“脏读”.“幻读”和“不可重复读取”. 2.READ COMMITTED (读提交):大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”,但不能避免“幻读”和“不可重复读取”.该级别适用于大多数系统. 3.REPEATABLE READ(可重复读) :保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的