首先用图来分别说明事务的四个隔离级别以及分别解决掉的问题:
现在分别举例区别:
读未提交:
曹阳阳问戴林桐借了500块钱让打到银行卡上,但是曹阳阳去查账的时候发现银行卡里多了5000块钱,高兴的不要不要的,准备约公安局的同事妹子出去嗨。然后这个时候,戴林桐也发现了这个问题,于是迅速rollback,曹阳阳和妹子嗨完之后去结账的时候才发现,原来卡里一分钱都没有,于是曹阳阳即将到手的妹子就这么泡汤啦。(曹阳阳的第一次约会)
事务1:戴林桐给曹阳阳转账。 事务2:曹阳阳查账。 由于曹阳阳查账时读取了戴林桐没有提交的数据,所以导致了这种结果,即脏读。
读已提交:
曹阳阳自从上次约会失败之后,又准备了一番,确认卡里的2000块钱是已经属于自己的,开始又一次走上了约妹子的道路,比较不幸的是,他妈妈是这时候正在进行双十一网购,然后随手就用曹阳阳的网银付账啦。曹阳阳进KTV的时候还专门查了一下卡里的钱还在,出来去结账时发现,完了,这次约会又蔫了。
事务1:曹阿姨网购整个过程包括付款。 事务2:曹阳阳进KTV之前查账以及最后出来KTV结账。 由于曹阳阳在操作事务2的过程中,事务1对数据进行了修改,所以导致事务2在两次数据库读取结果不一致,造成了这种问题。即不可重复读。
可重复读:
曹阳阳是一个风骚的文人,他总能找到安慰自己的理由,在屡战屡败之后,他再次走上啦相亲的道路。首先,他确认了卡里的钱是自己的,然后他告诉所有人在自己约会结束之前都不能动自己的卡,可以查看余额。然后开开心心约会去啦,这次约会很成功,至少成功给女孩买单啦。他很开心,准备回家,这时候曹阿姨给他打电话让他去银行,原来曹阿姨在他出去玩的时候查看了一下他这个月的账单,但是去打印的时候去发现账单多了1000+ ,甚为不解,让他去银行查一下。
事务1:曹阳阳查看自己余额直至约会完并且付款结束。 事务二:曹阿姨查看账单并且打印账单。
由于事务一过程中事务二可以进行查看操作,所以事务二两次查看结果不一样,但每一次的结果都是正确的,造成了这种问题。即幻读。
不管怎么说,曹阳阳还是成功地找着了GF,然后幸福地生活在一起,多次的约会经验给了他生活的灵感,于是他选择了虽然懒散但却安全舒适的Serializable模式。
据说他的女朋友叫“杨洋”,他叫“曹洋洋”~~~~~~嗯,就是这样。