读未提交示例操作过程-Read uncommitted
1、打开两个MySql的命令提示行,均进入相同数据库,并检查当前表内容为相同数据如下:

2、在A、B两端执行select @@tx_isolation;检查当前默认的隔离级别别,可以发现都是
Repeatable Read –可重复读-(在当前事务内,重复读取第一次读取过的数据就叫可重复读。)

3、修改A端的隔离级别为readuncommitted –读未提交。意思是可以读取别人没有提交的数据。
| set transactionisolation level read uncommitted; |
在绿色的MySql5.5上请执行:
| Set sessiontransaction isolation level read uncommitted; |
然后再查看是否已经发生改变:

4、在A、B两端都开启事务
| starttransaction; |
5、在B端修改一行数据如:
| update stud setname='Jhon' where id=1; |
其后在A端执行查询:select * from stud;

6、此时B端再次执行回滚操作
Rollback;
再在A端进行查询,结果发现数据又回到了之前的数据。这就是脏读:

7、对于B端写入的新数据,如果没有提交A端也一样能查询到,这叫幻读。

读已提交操作过程:-read COMMITTED
1、 检查A、B两端是否一致:

2、修改A端(左)的隔离级别为readcommitted;
| set transactionisolation level read committed; |
在A端开启事务:
starttransaction;
在B端开启事务

3、在A端进行查询:
| Select * fromstud; |
在B端修改一行记录并提交
| Update stud setname='itcast' where id=1; |
再回到A端进行查询,发现在同一个事务内,两次查询的结果不一样:

可重复读示例Repeatable Read
1、查看A端的隔离级别是否为Repeatableread级别:
Select@@tx_isolation;
2、先在A端在开启的事务内进行查询。
然后在B端修改数据库的内容。
新闻热点
疑难解答