事物之隔离性详解

概念:事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的失去,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

多个线程开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个线程在获取数据时的准确性。

如果不考虑隔离性,可能会引发如下问题:

1、脏读:是指一个事务读取了另一个事务没有提交的数据。

假如A和B各自有100元钱,A向B转了100元钱,执行update account set money=money+100 while name=‘b’;update account set money=money-100 while name=‘a’;当第一条执行完,第二条还没执行,B查询自己的账户,就会发现自己的账户多了100元,如果此时A再回滚自己的操作,那么B之后再查询自己的账户,就会发现自己的钱和之前并没有变化,还是100


2、不可重复读

在一个事务内读取表中的某一行数据,多次读取结果不相同。

还是上面那个例子,转账之前,银行查询A的账户是100元钱,A向B转了100之后,银行 对应上面两个sql语句并且已经提交,又查询A账户,发现是0元。这就导致了两次查询结果不相同。

注意:不可重复读有时候是正确的,就像这种情况,正是实际情况需要的,然而有时,不可重复读是不正确的,比如对某个地区统计GDP,两次查询结果不一样,该怎么报道呢?所以这种情况又是错误的。

不可重复读和脏读的区别,脏读是读取前一事务未提交的脏数据,不可重复读是重新读取了前一事务已经提交的数据。


3、虚读:是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

假如一个人存款100元没有提交,这时银行做报表统计所有用户的总额为600元,然后这个人提交了这时银行再统计发现账户为700元了,这就是虚读。


说了问题,那么怎么避免这些问题呢?请看我另一篇博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值