大话事务隔离级别

大话事务隔离级别

我,老婆(两个客户端)同时操作一个银行卡(家庭数据库中,一个银行卡即为一条记录,记录了我家银行卡号和余额)

起始这个数据库是Read uncommitted级别,现在我想买电脑,我比较喜欢Thinkpad,看了一款,准备付款,老板扣了我银行卡12000(开启事务,update),很巧,在家的老婆这时候,突然查询了我的银行卡余额(select),发现我的余额少了12000,气急败坏等我回家(脏读),然而我这时候又后悔了,我又想买Mac了,厚着脸皮找老板把钱退了(rollback),然后回到家,突然被噼里啪啦一顿骂,没等我解释这就是脏读,一个键盘已经扔在我在面前…

我决定把数据库的事务级别调整到Read committed,这样的话只有我确定走出店门(commit),老婆才会查询到扣款记录,不至于冤枉我。第二天我还要去买Mac,我看好了准备付款(开启事务),一看价格14000,我查了下(select),余额还有15000,刚刚够,只是有点肝疼,我说付款前再让我看一眼,很巧,这时候老婆拿银行卡买了一个2000的包(update),她买完了(commit),我也下定决心要付款了,结果店员查了下(select),说我余额不够,只有13000。我:???我很郁闷,刚刚卡里明明有钱的?我明白了,这里又出现了不可重复读!这会导致我一次事务内查询出的余额不一样

我回去求老婆半天,她才决定向我的银行卡里充了1000元,我决定把事务级别调整到Repeatable read,第三天我又去买Mac,二话不说就是准备付款(开启事务),在我一旦开始付款(update),直到走出店门(commit),老婆这个期间(开启事务)所有查询都是我付款前的余额,并且不能够再花一分钱(update),对于老婆来说,这就是可以重复读了,不会出现她在一次事务中读取同一条数据不一致的重复读问题,老婆要想看到这次消费,必须在我走出店门之后(我commit),她再次开启事务,执行查询,才能看到这次的余额变化,终于,我买到了电脑。

最后我想看下总家当还有多少,我开启事务,粗略看了一下,一共就有1张银行卡(count),余额0,谁知,在家的老婆这时候终于决定不再刷我的银行卡,她决定自己办一张银行卡(insert),而我正在刚查完余额的怀疑人生中,这时候,只见一股神秘力量让我的手指又按下了查询键,结果,哇,金色传说,居然出来了两张卡(count),我怀疑自己是不是出现幻觉了(幻读)??老婆居然自己办了银行卡??

这就是Repeatable read,它无法解决幻读问题,它能锁定一行数据的修改(update),但是其他人仍然可以随时执行insert操作!你在一个事务内仍然读出来的两次可能会不一样,要想避免出现这个,只能采取最高隔离等级,Serializable!读用读锁,写用写锁,这样可以避免以上所有问题,但是哈哈哈,我为啥要这样做呢。

文章写完了,老婆呢?QAQ

最后欢迎大佬指正

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值