mysql关系的除通俗_通俗解释MYSQL事务有关的特性

不同事务同时进行读写操作时,有可能出现以下情况:

脏写,脏读,不可重复读,幻读

它们对读写结果的影响以及严重性由高到低。即:脏写>脏读>不可重复读>幻读

以下情况仅只涉及出现的场景或者原因,解决方案另外讨论,这里不展开

1,脏写,就是指——开启事务后对某一张表写入数据并成功提交后,最终的数据却并没有真正存进表里的现象。好像这数据白写了一样,此之为“脏写”。

场景例子:

假设有2个事务A和B在某一时刻(暂且称呼为0点)一起开启了,它们即将要对某一张表(暂时假定为张三的银行账号)进行扣款(写操作)。

【事务A对应的业务是买手表,事务B对应的业务是买U盘】

0点时,账号存款是100块。两个事务已经一起开启,事务A想扣除50块,事务B想扣除70块,(因为0点时的存款是100,它们的操作都是合法的)。

但是因为某些原因,事务B延迟了,事务A首先扣除了50块,然后事务A提交了,账号的存款余额为50块,事务A扣款成功后,通知商家发货将手表送出,但此时事务B未进行。

紧接着,事务B终于开始对该账号扣除70块钱操作了,但此时存款余额已经不足以扣除70块,导致了事务回滚,事务B执行失败。存款余额回到0点,变回100块。

但刚刚的事务A已经提交了,也成功了,商家已经发货将手表送出了。而张三的账号还是100块,这就造成事务A扣除了(实际未被扣除的)50块。

这就是脏写,即“写了白写”。

2,脏读,简单地讲,就是读到了不存在的数据,此之为“脏读”。

情景例子:

还是上面的例子,0点时,账号存款是100块。

假设事务A对应的业务是【李四要检查张三是否百万富翁,是的话,李四就把女儿嫁给张三】。

而事务B对应的业务则是【王五误向张三这个账号汇款了100万】。

但是因为某些原因,这次事务A延迟了,事务B先执行,此时张三的存款为100万零100,但事务B还没提交。

然后紧接着,事务A终于开始查询张三的存款余额,发现是100万零100,确实是百万富翁后,提交了事务,然后李四就把女儿嫁了。

此时,事务B发现汇错款了,要回滚事务,张三存款余额回到0点,变回100块。

但刚刚的事务A已经提交了,李四觉得已经把女儿嫁给了百万富翁(实际并不是)了。

这就是脏读,读了不存在的数据。(读了其他业务尚未提交的数据)

未完待续。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值