mysql中事务的隔离级别

Posted 健康平安的活着

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql中事务的隔离级别相关的知识,希望对你有一定的参考价值。

一 事务隔离级别

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提交后,事务提示报错

以上是关于mysql中事务的隔离级别的主要内容,如果未能解决你的问题,请参考以下文章

mysql 的事务隔离级别 及各个隔离级别应用场景,详细

MySQL-8事务与隔离级别IO

mysql中事务的隔离级别

面试官:说一下MySQL事务隔离级别?

事务的隔离级别和mysql事务隔离级别修改

互联网项目中mysql应该选什么事务隔离级别 转