mysql事务-隔离级别

来源:互联网 发布:windows计划任务设置 编辑:程序博客网 时间:2024/05/21 17:37


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

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)

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




0 0
原创粉丝点击