事务的隔离级别的演示:避免脏读和不可重复读的发生

1.1.1 避免脏读,演示不可重复读发生
l 开启两个窗口A,B
l 设置A窗口的隔离级别为read committed;
SET SESSION TRANSACTION ISOLATION LEVEL read committed;

l 分别在两个窗口中开启事务:
start transaction;
l 在B窗口中完成转账
update account set money = money - 1000 where name= ‘小张‘;
update account set money = money + 1000 where name= ‘小凤‘;

* 没有提交事务!!!
l 在A窗口中进行查询:
select from account;

发现这个时候没有转账成功!!!(没有查询到另一个事务未提交的数据:说明已经避免了脏读)。
l 在B窗口中提交事务
commit;
l 在A窗口查询
select * from account;

***** 发现这次的结果已经发生了变化!!!(已经发生不可重复读:一个事务已经读到了另一个事务提交的update的数据,导致多次查询结果不一致。)

原文地址:http://blog.51cto.com/13587708/2113573

时间: 2024-10-02 22:50:13

事务的隔离级别的演示:避免脏读和不可重复读的发生的相关文章

[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.活跃事务列表 做的,以后的文

数据库的脏读、不可重复读、幻读

文章来源:http://www.bkjia.com/sjkjc/806530.html 数据库的脏读.不可重复读.幻读都和事务的隔离性有关.所以先了解一下事务的4大特性. 事务的4大特性(ACID): 原子性(Atomicity):事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行. 一致性(Consistemcy):事务前后,数据库的状态都满足所有的完整性约束. 隔离性(Isolation):并发执行的N个事务是隔离的,一个不影响一个,一个事务在没有commit之前,被修

MySQL InnoDB四个事务级别 与 脏读、不重复读、幻读

MySQL InnoDB事务隔离级别脏读.可重复读.幻读 希望通过本文,可以加深读者对ySQL InnoDB的四个事务隔离级别,以及脏读.不重复读.幻读的理解. MySQL InnoDB事务的隔离级别有四级,默认是"可重复读"(REPEATABLE READ). ·        未提交读(READUNCOMMITTED).另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读). ·        提交读(READCOMMITTED).本事务读取到的

mysql事务隔离级别以及有问题的读取(脏读,不可重复读,幻象读)

1.事务里一些有问题的读取:脏读,不可重复读,幻象读 脏读 (dirty read)事务T1更新了一行记录的内容,但是并没有提交所做的修改.事务T2读取更新后的行,然后T1执行回滚操作,取消了刚才所做的修改.现在T2所读取的行就无效了. 不可重复读取 (nonrepeatable read)事务T1读取一行记录,紧接着事务T2修改 了T1刚才读取的那一行记录.然后T1又再次读取这行记录,发现与刚才读取的结果不同.这就称为“不可重复”读,因为T1原来读取的那行记录已经发生了变化. 幻像读取 (ph

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

事务隔离级别.脏读.不可重复读.幻读 网络上关于这方面的博文有些偏理论,有些通篇代码,都不能深入浅出.本文用图文并茂的方式,配上行云流水般的代码,非要摆清楚这个问题.相关代码已提交至码云(点击这里下载). 事务是现代关系型数据库的核心之一.在多个事务并发操作数据库(多线程.网络并发等)的时候,如果没有有效的避免机制,就会出现以下几种问题: 第一类丢失更新(Lost Update) 在完全未隔离事务的情况下,两个事务更新同一条数据资源,某一事务完成,另一事务异常终止,回滚造成第一个完成的更新也同时

总是忘记的场景:MySQL InnoDB四个事务级别 与 脏读、不重复读、幻读

MySQL InnoDB事务隔离级别脏读.可重复读.幻读 MySQL InnoDB事务的隔离级别有四级,默认是“可重复读”(REPEATABLE READ). ·        未提交读(READUNCOMMITTED).另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读). ·        提交读(READCOMMITTED).本事务读取到的是最新的数据(其他事务提交后的).问题是,在同一个事务里,前后两次相同的SELECT会读到不同的结果(不重复读).

Hibernate中的事务隔离问题(脏读、不可重复读、幻读)

Hibernate中的事务隔离问题(脏读.不可重复读.幻读) 1.事务的特性 事务的四个特性: 1)原子性:事务是进行数据库操作的最小单位,所以组成事务的各种操作是不可分割的 2)一致性:组成事务的各种操作,要么全部成功,要么全部失败.其中有一个失败,事务无法完成 3)隔离性:在并发中,每个事务都是独立的 4)持久性:这是结果,表示在事务提交之后,数据将持久的保存到数据库 2.事务的隔离问题 事务的三个隔离问题: 1)脏读:一个事务读到了另一个事务还没提交的数据 如:A事务正在读一个数据a,但是

关于数据库事务中脏读、不可重复读和幻读的理解

数据库有四种隔离级别,分别是: SOLATION_READ_UNCOMMITTED:允许读取改变了的还未提交的数据,可能导致脏读.不可重复读和幻读. ISOLATION_READ COMMITTED:允许并发事务提交之后读取,可以避免脏读,可能导致重复读和幻读. ISOLATION_REPEATABLE_READ:对相同字段的多次读取结果一致,可导致幻读. ISOLATION_SERIALIZABLE:完全服从ACID的原则,确保不发生脏读.不可重复读和幻读. 四种不同的隔离级别代表着数据库对资

数据库并发事务存在的三个问题(脏读、不可重复读、幻读)

如果不考虑事务隔离性,可能会发生以下情况 脏读:事务a,读到了事务b未提交的数据,如果事务a读到了事务b的一些中间数据,待处理的数据.b事务数据还没有提交,就被a事务访问了 (解决方法:将 读未提交 级别提高到 读已提交 例如:orale在事务a 更新t表的时候,表t为锁住的状态,事务a未提交之前,事务b就不能访问t表) 不可重复读:指的是事务两次读取数据不一样.因为中间被其他事务修改了.解决方法就是 将 级别提高到 可重复.使用行级锁,锁定当前记录,其它事务无法更改.针对update操作 幻读