为了账号安全,请及时绑定邮箱和手机立即绑定

脏读幻读不可重复读

哪个大佬说一下为什么没提交的数据可以被读到?

正在回答

2 回答

数据在进行完操作但没有进行提交时,他是存在日志当中的,只有提交之后,才会从日志中存到数据库中

0 回复 有任何疑惑可以回复我~

    一个事务读到另一个事务,尚未提交的修改,就是脏读。这里所谓的修改,除了Update操作,不要忘了,还包括
Insert和Delete操作。

举个例子:预订房间。
有一张Reservation表,往表中插入一条记录,来订购一个房间。

 事务1:在Reservation表中插入一条记录,用于预订99号房间。

 事务2:查询,尚未被预定的房间列表,因为99号房间,已经被事务1预订。所以不在列表中。

 事务1:信用卡付款。由于付款失败,导致整个事务回滚。
            所以插入到Reservation 表中的记录并不置为持久(即它将被删除)

       而事务2刚刚读取时显示99号房间不在列表中,即99号房间不可用,已经被预定。但是由于事务回滚现在99号房间则为可用。这就是脏读。

        由于数据库的多版本性(不是版本号)和并发性,你可以理解成缓存区(是在数据没提交之前的临时存放区域),另外一个事务可能在缓存区读取到这些已作出修改但未提交的数据,就出现了脏读。


2 回复 有任何疑惑可以回复我~
#1

qq_既_定_0

醍醐灌顶!谢谢
2018-09-15 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

脏读幻读不可重复读

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信