mysql 读未提交数据,MySql数据库的事务隔离级别学习

一、Mysql事务的隔离级别分为

读未提交

读已提交

可重复读

串行化

1、读未提交

事务A可以读取到事务B未提交的数据

设置MySql数据库的隔离级别

set SESSION TRANSACTION ISOLATION LEVEL READ uncommitted

查看当前数据库事务隔离级别

select @@tx_isolation;

8650efd681f4c69718516fbe4df02d66.png

客户端A使用事务查询数据

BEGIN

SELECT * FROM tb_demo

查询结果

0671e41a57d38b562a26bc4973e9281f.png

客户端B使用事务更新(并未提交事务)

BEGIN

update tb_demo set math = 4000

客户端A再次查询得到结果,可以发现A可以查询到B未提交的数据

0593f34e3a1cd5c6131fb955e7d10c7f.png

读未提交会产生幻读,不可重复读,脏读的问题

2、读已提交

设置事物的隔离级别为读已提交

set SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED

客户端A使用事务查询数据

BEGIN

SELECT * FROM tb_demo

查询结果

833a9b691e0ccbce88e20de5760a77da.png

客户端B使用事务更新(并未提交事务)

BEGIN

update tb_demo set math = 100

客户端A再次查询得到结果,可以发现A查询不到B未提交的数据

0593f34e3a1cd5c6131fb955e7d10c7f.png

客户端B提交事务

COMMIT

客户端A再次查询结果(客户端A能够读取到B已经提交的数据)

0671e41a57d38b562a26bc4973e9281f.png

读已提交可以解决脏读 存在不可重复读,幻读问题

3、可重复读

设置数据库的隔离级别

set session TRANSACTION ISOLATION LEVEL REPEATABLE read

客户端A查询数据

begin

select * from tb_demo

f1d943173223a1d8b3b1bc77111a1fee.png

客户端B更新数据

BEGIN

update tb_demo set math = 100

此时使用客户端A查询数据(数据为之前查询到的数据)

select * from tb_demo

80c48ea05e3407aa33fe69d59f1cc684.png

客户端B提交事务

commit

此时使用客户端A再次查询数据(数据依然为之前查询到的数据)在整个事务中读取到的数据不会改变,所以称为可重复读

select * from tb_demo

80c48ea05e3407aa33fe69d59f1cc684.png

可重复读解决脏读,不可重复读问题,存在幻读问题

4、串行化

客户端B需等待客户端A事务完成提交后才可继续进行。是完整的隔离级别,会锁定对应的数据表格,因而会有效率的问题。

标签:事务,隔离,demo,数据库,查询,提交,MySql,tb,客户端

来源: https://www.cnblogs.com/sun-in-sky/p/14516804.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值