mysql事务-隔离级别

本文通过两次实验探讨了MySQL中不同事务隔离级别对数据读取的影响。在READ-UNCOMMITTED和REPEATABLE-READ两种隔离级别下,观察到了预期外的现象,即在一个事务回滚后,另一个事务读取到的数据状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


事务隔离级别一般分为四个层级:

READ-UNCOMMITTED; 导致--->脏读、不可重复读、幻读

READ-COMMITTED;        导致--->------、不可重复读、幻读

REPEATABLE-READ;      导致--->-------、---------------、幻读

SERIALAZIBLE;                 导致--->-------、---------------、-----

上图所谓的表应该没什么说的。今天在dos下想要进行验证,发现得不到验证的结果。过程如下:

一、验证一

1、打开两个dos窗口A、B连接本地mysql;

2、mysql默认的global隔离级别为REPEATABLE-READ,查看方式为(select  @@global.tx_isolation)。

      A设置session的隔离级别为READ-UNCOMMITTED,方式为(set tx_isolation = 'READ-UNCOMMITTED')。

      B的隔离级别还是默认的REPEATABLE-READ.

3、B窗口打开事务(begin或start transaction),更新测试表的测试数据。update操作

4、A窗口打开事务(方式和步骤3一致),查询测试表的测试数据,此时发现测试数据已经修改。

5、B执行回滚(rollback),查询发现步骤3的更新已经回滚;

6、A查询测试表的测试数据,发现也已经回滚。

?问题不应该是A查询的数据还是更新后的脏数据吗?

二、验证二

步骤1和验证一一致;

1、。。。

2、B窗口打开事务(begin或start transaction),更新测试表的测试数据。update操作

3、A窗口打开事务(方式和步骤3一致),查询测试表的测试数据,此时发现测试数据已经修改。

?问题不应该是A窗口读的数据应该是没有更新的数据吗?因为A的默认隔离级别为REPEATABLE-READ

当时考虑可能是mysql的自动提交惹的祸,查看mysql的自动提交设置(show variables like 'autocommit')

mysql的默认自动提交,修改A、B的autommit为手动,(set autocommit = 0)

然后再进行验证,结果一样,请大牛们解惑,谢谢




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值