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中事务的隔离级别的主要内容,如果未能解决你的问题,请参考以下文章