脏读,不可重复读,幻读是数据库中关于隔离级别的三个概念。
脏读:一个事务正在修改数据库中的数据,但是还没有提交到数据库中,这时候另一个事务又来读数据库,那么很显然,它拿到的是更新前的数据,也就是错误的数据。
比如假设你卡里现在由1000块,A往你卡里打钱500块,本来呢,钱打进去以后呢,账面上应该显示1500,注意此时抽筋的B也要给你打钱,他在A提交数据之前从数据库读出来的也是1000块,B要给你打300,操作完了,数据库中首先写入1500,然后B一提交,覆盖1500,本来1800,现在账面成了1300,坑爹啊,白白损失500,这就是脏读。
不可重复读:一个事务读取数据库中的数据,这时候查出一个数据集,这时候另外一个事务恰好对这部分数据做了修改,然后这个事务再去读取数据后,发现前后不一样了。
还是我去ATM机上看看卡里还有几毛钱,一看,晕倒,10块钱,傻眼了,按按其他地方缓和一下自己的心绪,忍不住再看一眼吧,我靠,1000000,吓人哪!这就是不可重复读。
幻读:当一个事务要对数据库中相应的数据进行修改,这时候另外一个事务刚好插入了一条数据,而插入的这条数据还刚好满足第一个事务的修改条件,此时就会发生这样的现象,事务一处理完了数据后,发现还有符合条件的数据没有进行修改。
老板说今年公司效益好,无论新老员工集体多发奖金,大家爽歪歪,刚好有一个刚入职的哥们儿,更是爽得不得了,活还没干几天就发奖金,可高兴得有点早了,人力还没把这位的信息录入到系统中去,这时候财务要给大家打钱了,人力突然想到,我靠,还有一个新兵蛋子没进系统,但是还是晚了一步,钱发出去了,但是这位坑货没拿到奖金,苦逼……对于财务这就是幻读