初识脏读、不可重复读、幻读

I . 脏读:一个事务读到另一个事务未提交的数据,导致多次查询的结果不一致;

以转账为例 ,mysql数据库的默认隔离级别为 repeatable read,此隔离级别可以避免脏读和不可重复读,为了演示产生脏读,

开启两个A、B两个窗口,进行A事务和B事务。

1.在A 窗口中将隔离级别设置为 red uncommited ,  B窗口不变,默认为repeatable read;

2.假设张三有 100块   李四也有100块,同时在A、B窗口中开启事务,在B窗口中进行转账事务,张三转给李四50块,在B事务提交前,张三通知李四查账,此时李四在A事务中查到的结果是150;此时B事务未提交,却已经在另一个A事务中读到了数据,如在B事务提交前发生了异常,B事务进行了回滚(roolback),李四再去查,发现咋变成100了,两次(多次)查询的结果不一致,就这样产生了脏读大致过程如下图




II 不可重复读 :一个事务读到另一个事务已提交的 update(主要是修改)的数据,导致多次查询的结果不一致

同样以转账为例 ,为了演示产生产生不可重复读

开启两个A、B两个窗口,进行A事务和B事务。

1.在A 窗口中将隔离级别设置为 red commited ,  B窗口不变,默认为repeatable read;

2.假设张三有 100块   李四也有100块,同时在A、B窗口中开启事务,在B窗口中进行转账事务,张三转给李四50块,在B事务提交前,张三通知李四查账,此时李四在A事务中查到的结果是100,没收到钱;此时B事务未提交,A事务中没有读到B事务未提交的数据,避免了脏读。然后提交事务,李四再去查,发现变成150了,读到了另一个事务已提交的数据两次(多次)查询的结果不一致,就这样产生了不可重复读读大致过程如下图




III 幻读:一个事务读到另一个事务已提交的 insert into(添加到数据库)的数据,导致多次查询的结果不一致

~~~以上为个人理解,不妥之处,希望得到指正



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值