小言_互联网的博客

mysql中事务的隔离级别

345人阅读  评论(0)

一 事务隔离级别

1.1事务隔离级别

1.读未提交;

2.不可重复读

3.可重复读

4.串行

1.2 查看事务隔离级别

select @@tx_isolation;  可以看到是可重复读

二 事务隔离级别操作案例

2.1  读未提交

可能使用到的命令:

start  transaction;
set session transaction isolation level read uncommitted;

update tb_beijing set pvalue=pvalue-10 where id=1;

rollback;

1.初始A,B两个事务,初始的时候

A:并设置当前事务模式为read uncommitted(读未提交)

 B:并设置当前事务模式为read uncommitted(读未提交)

 2事务B开启事务,进行修改

 此时B进行修改后,并未提交此时A居然看到了 B未提交的数据

 3.某种原因,事务B进行回滚,再次查看A,B事务

    B: 60

 A:60

 结论:出现脏读的情况。其实还有不可重复,幻读的问题。

 2.2   不可重复读

可能用到的命令:

start  transaction;
set session transaction isolation level read committed;

update tb_beijing set pvalue=pvalue+2010 where id=1;

rollback;

1.设置A,B事务的隔离级别都为:不可重复读

 2.在事务b进行修改,不提交,查看A,B事务的值

事务的值并未查看到事务B修改的数据。

 3.事务B进行操作的事务提交后,

B: 

 A:

 结论:读取提交的数据。但是,可能多次读取的数据结果不一致(不可重复读,幻读)。用读写的观点就是:读取的行数据,可以写。

 2.3   可重复读

1.可能用到命令

start  transaction;
set session transaction isolation level repeatable read;

update tb_beijing set pvalue=pvalue-200 where id=1;

rollback;
select @@tx_isolation; 

1.事务A和事务B都重新设置事务级别为repeatable read,

 2.事务B修改数据,并且进行提交;查看事务A,B;事务A在自己的事务里面并未看到事务B的提交数据

 2.事务A进行提交,再次查询,可以看到事务A可以看到b的修改

3新增数据

3.1 事务b新增数据,并提交,事务A在自己的事务里看不到:事务B提交的数据

  3.2 事务b新增数据,进行commit提交,事务A才能看到

 

  2.4   串行

1.事务A开始事务,查询信息,锁表查内容,事务B,开启事务,插入数据,现在无法插入

 2.事务A提交后,事务提示报错


转载:https://blog.csdn.net/u011066470/article/details/128880532
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场