事务隔离级别、脏读、不可重复读、幻读

数据库隔离级别

​ 事务隔离是多个事务同时进行时的隔离。它们之间的相互影响与隔离级别有关

​ 数据库隔离级别数据库事务的隔离级别有4个,分别是读未提交(可能出现脏读、不可重复读、幻读)、读已提交(可能出现不可重复读、幻读)、可重复读(可能出现幻读)、可串形化。隔离级别越来越高,事务之间的影响越来越小,效率越来越低

读未提交

​ 举个例子:两个窗口卖最后一张票,第一个窗口有一个人买票,但是该事务未提交。第二个窗口另一个人再买票发现票已经有人买,然后就离开了。结果第一个窗口的人不买了,于是回滚了事务并提交,最后票没卖出去。

​ 上述情况中,第二个窗口的人读到的"票已经有人买了"是一个脏数据,它并不是最后事务提交的数据。因此读未提交可能会出现脏读的情况。

读已提交

​ 它解决了上面脏读的情况

​ 举个例子:A拿银行卡消费,查询卡里有100元钱。同时B将该卡的100元转走,在A之前提交了事务,当A进行消费时,扣款失败。

​ 也就是说,A先读数据,B跟着更新了数据并提交了事务,当A再次读取数据时,数据已经发生变化,这就是所谓的不可重复读。Oracle默认为读已提交

可重复读

​ 它保证同一事务中只会读取到当前事务对数据的修改,其它事务修改的数据不会影响当前事务的读取。(意为可重复读到相同的东西)

​ 也就是在上述情况下,当A拿银行卡消费时,B不能进行转账。

​ 但是在这个级别下,还可能出现幻读的情况。

​ 幻读的例子:比如当前有20元钱,A事务查询钱数得到20,此时B事务更新了钱数为0并提交了事务。然后A事务执行更新update操作,然后再查询钱数得到0。mysql默认为读已提交

可串形化

​ 串形将所有的事务一个一个的进行,所以穿行化的事务隔离级别不会出现脏读、不可重复读、幻读等问题。代价就是性能特别低

转载请注明出处!!!

如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值