1.打开2个cmd 连接同一个数据
2.分别查询 数据库当前事物隔离级别 select @@tx_isolation;
3.在任意一个终端(A)设置隔离级别为(read uncommitted) set session transaction isolation level read uncommitted;
2个终端的隔离级别已经不一样了 A终端为read uncommitted B终端为repeatable read(默认隔离级别)
4.两个终端都 设置不自动提交 show variables like '%autocommit%' ; set autocommit=0;
5.终端分别开启事物 并验证隔离级别的含义 start transaction;
A终端修改name 不提交事物 B终端没有查看到数据变化
A终端提交事物后 B终端 查询的依然是 改之前的数据 因为B终端的隔离级别是可重复度 所有在同个事物中 读取到的数据始终一致 没法感知到A终端的修改
只有当B终端结束这次事物 在下新的事物中才能感知到A终端对数据的更改
AB终端重新开启事物 start transaction;
B终端修改name 不提交事物 A终端为未提交读 A终端能查看到B终端对数据的改变
B终端继续修改name 不提交事物 A终端在同一个事物中 能查看到B终端对数据的再次变更 A终端不可重复读 B终端事物回滚后 A终端查看到数据恢复到更改之前状态 A看到B并未提交事物的数据的现象叫做脏读
设置A终端事物隔离级别为(read committed ) set session transaction isolation level read committed;
AB终端重新开启是事物
B终端修改name 不提交事物 A终端在同一个事物中不能查看到B终端对数据的变更
B终端提交事物后 A终端在同一个事物中能查看到B终端对数据的变更 这种现象交不可重复读
设置A终端事物隔离级别为(serializable) set session transaction isolation level serializable;
AB终端重新开启是事物