数据库事物并发有可能出现的问题

之前对数据库事物的很多知识都很零散,今天有时间整理整理这些知识。

1.第一类丢失更新

情况

第一个事物更新某条记录,第二个事物也更新同一条记录,第一个事物正常提交了,但是第二个事物却回滚了,造成第一个事物更新失效

 举例

我的银行账号有1000元,我某天去银行想给我的账号存500元,我女朋友也想给我的账号存100元

我和我女朋友都是同时(并发事物)开始办理业务的,这时候我的500元成功存入了,账户余额变成了1500元,我很开心

但是,我女朋友在存钱的过程中突然后悔了,她不想存了,拿着她的100元走了,于是银行柜台给将我的账户余额回滚到之前的余额1000元 ! ! !

2.脏读

情况

第二个事物读取到第一个事物未提交的更新数据,然后第二个事物继续依据这个结果进行业务操作,但是第一个事物却将数据进行了回滚

 举例

我的银行账号有1000元,我某天去银行想给我的账号存990元,我女朋友想给我凑个整数,她准备再给我存10元

我和我女朋友都是同时开始办理业务的,开始的时候我存入了990元,账号余额变成了1990元,我的女朋友看到我的账号余额变1990元了,然后给我凑整存入了10元,但是我突然觉得银行利息太低了,将我的交易进行了回滚,拿走了我存入的990元,但是我女朋友办理完业务后,账户余额变为了2000元,这样银行就损失了990元。

3.幻读

情况

一个事物读取到了另一个事物新插入的数据(多次读取总记录)

 举例

我这个月花了10000元,我女朋友觉得花的有些多,她打算查查我的银行流水记录,看看有没有大额转账,但是我不知道她在查我的帐,我继续花着卡里的钱

她第一次查询我的详细账单时,发现有1000比交易,没有大额转账记录,她放心了,但是又怕自己没看仔细,又准备看一遍账单,但是与此同时我又新产生了一笔消费(插入了一条记录),这时候发现有1001比交易了,她开始怀疑自己眼花了,第一次1000比交易,第二次1001交易,这就是出现了幻读

4.不可重复读

情况

一个事物读取到了另一个事物已提交的记录(多次读取同一条记录)

 举例

我准备去银行存100元,我女朋友在查询我的账号余额,她第一查询发现账号中有2000元,当我存完后,她再次查询余额变成了2100元,这就是不可重复读

5.第二类丢失更新

情况

多个事物基于最初的查询结果更新同一条记录

 举例

我的账户有2100元,我和我女朋友去银行同时办理业务,我准备存入500元,她准备取出600元

但是我们是同时开始办理业务的,如果我先办理完业务那么我的账户余额变为2100+600元

她再办理完业务余额变为2100-600元,最后余额变为1500元,我的钱变少了,我存钱的更新记录丢失了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章