MySQL5.7 Read Committed事务隔离级别的研究-出现幻读

事务隔离级别为Read Committed的情况下:

事务2不执行commit,可以读取到事务1新添加的记录。此处说明出现了幻读。

当事务隔离级别改为REPEATABLE-READ后,能够解决该问题即解决幻读。

幻读定义:一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据。



session1执行事务1:只插入和提交

mysql> select @@global.tx_isolation;select @@tx_isolation;

+-----------------------+

| @@global.tx_isolation |

+-----------------------+

| READ-COMMITTED        |

+-----------------------+

1 row in set (0.01 sec)

+----------------+

| @@tx_isolation |

+----------------+

| READ-COMMITTED |

+----------------+

1 row in set (0.00 sec)

mysql> start transaction;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from sun;

+--------+------+

| name   | age  |

+--------+------+

| summer |   26 |

+--------+------+

1 row in set (0.00 sec)

mysql> insert into sun values(‘aa‘,‘88‘);

Query OK, 1 row affected (0.00 sec)

mysql> commit;


session2执行事务2:只查询

mysql> select @@global.tx_isolation;select @@tx_isolation;

+-----------------------+

| @@global.tx_isolation |

+-----------------------+

| READ-COMMITTED        |

+-----------------------+

1 row in set (0.00 sec)

+----------------+

| @@tx_isolation |

+----------------+

| READ-COMMITTED |

+----------------+

1 row in set (0.00 sec)

mysql> start transaction;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from sun;

+--------+------+

| name   | age  |

+--------+------+

| summer |   26 |

| aa     |   88 |

+--------+------+


时间: 2024-11-03 22:05:36

MySQL5.7 Read Committed事务隔离级别的研究-出现幻读的相关文章

MySQL5.7 Repeatable read事务隔离级别的研究。

事务隔离级别为Repeatable read的情况下 事务2不执行commit,读取不到事务1新添加的记录. 事务2执行了commit,可以读取到事务1新添加的记录.  session1执行事务1:只插入和提交 mysql> select @@tx_isolation; +-----------------+ | @@tx_isolation  | +-----------------+ | REPEATABLE-READ | +-----------------+ 1 row in set (

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

一.数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这四个级别可以逐个解决脏读 .不可重复读 .幻读 这几类问题. √: 可能出现    ×: 不会出现   脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed × √ √ Repeatable read × × √ Serializable × × × 注意

RR隔离级别的查询的幻读场景

原文地址:http://blog.51cto.com/liuzhanbin/2347697

MySQL(26):事务的隔离级别出现问题之 幻读

1. 幻读 幻读(Phantom Read)又称为虚读,是指在一个事务内两次查询中数据条数不一致,幻读和不重复读有些类型,同样是在两次查询过程中,不同的是,幻读是由于其他事务做了插入记录的操作,导致记录数有所增加. 例如:银行在做统计报表时统计account表中所有用户的总金额时候,此时总共有三个账户,总共金额为3000元,这时候新增了一个用户账户,并且存入1000元,这时候银行再次统计就会发现账户总金额为4000,造成了幻读情况 2. 演示幻读: (1)首先我们设置b账户的隔离级别 b账户:由

MySQL 四种事务隔离级的说明[转]

很早之前写的文章,重新回顾和学习下: 按照SQL:1992 事务隔离级别,InnoDB默认是可重复读的(REPEATABLE READ).MySQL/InnoDB 提供SQL标准所描述的所有四个事务隔离级别.你可以在命令行用--transaction-isolation选项,或在选项文件里,为所有连接设置默认隔离级别.例如,你可以在my.inf文件的[mysqld]节里类似如下设置该选项: transaction-isolation = {READ-UNCOMMITTED | READ-COMM

事务隔离级别的理解

数据库事务的隔离级别有4种,由低到高分别为Read uncommitted .Read committed .Repeatable read .Serializable .而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读.下面通过事例一一阐述它们的概念与联系. Read uncommitted 读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据. 事例:老板要给程序员发工资,程序员的工资是3.6万/月.但是发工资时老板不小心按错了数字,按成3.9万/月,该钱已经打到程序员的户

SQL Server 事务隔离级别的解析

近来在项目中遇到的一些有关事务的问题,跟同事间讨论了一下,后面翻看了一些书籍和做了一些测试,趁有点时间把它写下来,一来加深印象,二来希望对大家有所帮助,当然,由于自身水平问题,如理解有误,还请大牛指出, 本人在此先行谢过. 事情首先是这样引起的, 同事写的一个导入,但在导入的过程中,由于要插多条数据,当有些数据未能插入时,却没有回滚所有的数据,而是往下执行,这样问题就来了,无法得知系统到底导了多少条记录.用户需要的结果是,要么都导入成功,要么都不成功. if OBJECT_ID('tb1') i

MySQL 四种事务隔离级的说明

转自:http://www.cnblogs.com/zhoujinyi/p/3437475.html 很早之前写的文章,重新回顾和学习下,也可以看这篇文章说明. 按照SQL:1992 事务隔离级别,InnoDB默认是可重复读的(REPEATABLE READ).MySQL/InnoDB 提供SQL标准所描述的所有四个事务隔离级别.你可以在命令行用--transaction-isolation选项,或在选项文件里,为所有连接设置默认隔离级别.例如,你可以在my.inf文件的[mysqld]节里类似

SQLserver锁和事务隔离级别的比较与使用(转)

SQLserver锁和事务隔离级别的比较与使用(转) http://www.cnblogs.com/chenlulouis/archive/2010/12/06/1898014.html http://www.cnblogs.com/CareySon/p/3509030.html