`

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

阅读更多

 

1.演示脏读发生

a窗口
set transaction isolation level read uncommitted;
start transaction;
select * from account;
-------------发现a帐户是1000元,转到b窗口
select * from account;
-------------发现a帐户是1100元,发生了脏读(这个事务读取到了别的事务未提交的数据)


b窗口
start transaction;
update account set money=money+100 where name='aaa';
-------------事务在不提交的情况下,转到a窗口进行查询

2.避免脏读,并演示不可重复读问题的发生


a窗口
set transaction isolation level read committed;
start transaction;
select * from account;
-------------发现a帐户是1000元,转到b窗口
select * from account;
-------------发现a帐户是1000元,这时我们发现read committed这种级别可以避免脏读
-------------转到b窗口
select * from account;
-------------发现a帐户是1100元,这时就发生不可重复读(指这个事务读取到了别的事务提交的数据)

b窗口
start transaction;
update account set money=money+100 where name='aaa';
-------------事务在不提交的情况下,转到a窗口进行查询
commit;
-------------转到a窗口

3.避免脏读、不可重复读,并演示虚读问题的发生


a窗口
set transaction isolation level repeatable read;
start transaction;
select * from account;
--------------------发现a帐户是1000元,并且表的总纪录数是3条,这时转到b窗口
select * from account
--------------------发现a帐户是1000元,这说明repeatable read这种级别可避免脏读
-------------------转到b窗口
select * from account
---------------------发现a帐户是1000元,这说明repeatable read这种级别还可以避免不可重复读
---------------------转到b窗口
select * from account
---------------------发现表中可能会多出一条ddd的记录,这就发生了虚读,也就是在这个事务内读取了别的事务插入的数据(幻影数据)

b窗口
start transaction;
update account set money=money+100 where name='aaa';
---------------------转到a窗口
commit;
---------------------转到a窗口
start transaction;                这个地方另外开一个事务才可以
insert into account(name,money) values('ddd','1000');
commit;
--------------------转到a窗口                      

4、实现最高级别

---------------------------------------------------------------------------------------------------------------------

Oracal  只支持2种处理级别 : ReadCommint                Serializable  2种级别

 

分享到:
评论

相关推荐

    4种事务的隔离级别

    • 并发事务之间相互干扰,可能导致事务出现读脏,不可重复度,幻读等问题 • InnoDB实现了SQL92标准中的四种隔离级别 (1)读未提交:select不加锁,可能出现读脏; (2)读提交(RC):普通select快照读,锁select /...

    MySQL数据库事务隔离级别详解

    数据库事务隔离级别 ...这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几类问题。 √: 可能出现 ×: 不会出现 事务级别 脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed

    MySQL的四种事务隔离级别

    MySQL的四种事务隔离级别 1、脏读 2、不可重复读 3、幻读

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

    数据库的脏读、不可重复读、幻读都和事务的隔离性有关。所以先了解一下事务的4大特性。  事务的4大特性(ACID):  1、原子性(Atomicity):事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么...

    数据库锁(行锁,表锁,共享锁,排他锁)脏读、不可重复读、幻读和事物隔离级别

    数据库锁(行锁,表锁,共享锁,...顾名思义,表锁就是一锁锁一整张表,在表被锁定期间,其他事务不能对该表进行操作,必须等当前表的锁被释放后才能进行操作。表锁响应的是非索引字段,即全表扫描,全表扫描时锁定整张

    事务隔离级别和脏读的快速入门

    仅从ACID或非ACID角度考虑问题是不够的,你应知道你的数据库支持何种事务隔离...在本文中,我们将解释什么是事务隔离级别和脏读,并给出一些广受欢迎的数据库是如何实现它们的。ANSISQL给出了四种标准的事务隔离级别:

    数据库事务的四大特征以及隔离级别

    1. 事务的四大特征(ACID) 原子性(Atomicity):事务包含所有操作要么全部成功,要么全部回滚。 一致性(Consistency):一个事务执行之前和...Serializable(串行化):可避免脏读、不可重复读、幻读的发生。 Rep

    MySQL可重复读级别能够解决幻读吗

    关于脏读和不可重复读在相应的隔离级别下都很容易的复现了。但是对于幻读,我发现在可重复读的隔离级别下没有出现,当时想到难道是MySQL对幻读做了什么处理? 测试: 创建一张测试用的表dept: CREATE TABLE `dept`...

    一文彻底读懂PostgreSQL事务隔离级别

    不可重复读:一个事务重新读取之前读取过的数据,发现该数据已经被另一个事务(在初始读之后提交)修改。 幻读:一个事务重新执行一个返回符合一个搜索条件的行集合的查询, 发现满足条件的行集合因为另一个最近提交...

    msyql锁、事务隔离级别各种场景验证测试.rar

    我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能 就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。 这些问题的本质都是数据库的多事务并发问题,为了...

    通过实例分析MySQL中的四种事务隔离级别

    前言 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。数据库事务的隔离级别有4个,下面话不多说了,来一起看看...在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻读。 串行读(Seria

    基于框架的Web开发-spring事务入门一个转账的例子.doc

    可重复读:避免脏读和不可重复读.但是虚读有可能发生. 串行化的:避免以上所有读问题. 2 一个转账的例子 例子模拟两个账户之间的转账操作,基本业务逻辑如下: A账户,余额1000元 B账户,余额1000元 Transfer(A账户,...

    mysql可重复读和幻读的理解

    mysql可重复读和幻读的理解可重复读和幻读的定义最后总结参考资料 很多教程和书籍对mysql的可重复读和幻读的解释都比较含糊,本文结合原理和其他的考证,深入分析下。 这里讨论的引擎是常用的InnoDB。 可重复读和幻...

    oracle 数据库隔离级别学习

    oracle 事务隔离级别 事务不同引发的状况: 脏读(Dirty reads) 一个事务读取另一个事务尚未提交的修改时,产生脏读 很多数据库允许脏读以避免排它锁的竞争。 不可重复读(Nonrepeatable reads) 同一查询在同一事务中...

    图文解释mysql的四个事务隔离级别

    一直只是脑子里有一个印象,久而久之还是会忘记,忘记后又要到网上查找相关资料,但是没实践过就对mysql事务隔离级别理解不是特别的深入,现在自己亲手实践体验一下这个这四个事务隔离级别还有一些相关细节。...

    数据库事务及锁机制面试题

    脏读、不可重读度、幻读,其实都是数据库的一致性问题,必须由一定的事务隔离机制来解决。性能高和事务完全隔离性无法同时满足,DB提供了4项事务隔离级别来权衡,需要用户根据自身业务来选择合适的隔离级别。隔离...

    数据库事务的隔离级别

    隔离级别都与问题相对应,数据库操作常见的问题:  1 脏读: 一个事务可以读取另一个事务未提交的数据  2 不可重复读: 一个事务连续两次执行某个...  数据库事务隔离级别  1 read uncommitted 脏读的那个级别

    详解MySQL是如何解决幻读的

    如果你看到了这篇文章,那么我会默认你了解了 脏读 、不可重复读与可重复读。 1. 多版本并发控制(MVCC)(快照读) 多数数据库都实现了多版本并发控制,并且都是靠保存数据快照来实现的。 以 InnoDB 为例,每一行...

    .NET中 关于脏读 不可重复读与幻读的代码示例

    脏读 定义:A事务执行过程中B事务读取了A事务的修改,但是A事务并没有结束(提交),A事务后来可能成功也可能失败。 比喻:A修改了源代码并且并没有提交到源代码系统,A直接通过QQ将代码发给了B,A后来取消了修改。 ...

Global site tag (gtag.js) - Google Analytics