数据库的并发操作与数据的不一致性

并发操作概念:数据库支持数据共享,也就是说允许多事务同时操作同一数据。

事务:完整的做一件事。
并发操作带来的问题与描述:
并发可能的问题问题描述
丢失修改前提条件:两个或多个事务选择同一条数据,然后基于最初选定的值进行更新操作。
示例:
1、假设:事务X,事务Y,表中初始值initial=100。
2、演绎过程:
a.01时刻,X读取initial=100;
b.02时刻,Y读取initial=100;
b.03时刻,事务X更新表initial=initial-10,此时数据库中的值为90;
c.04时刻,事务Y更新表initial=initial-1,数据库中的值为99;
实际上应该为89.


脏读前提条件:一个事务访问数据,并进行修改,但尚未提交到数据库;另一个事务也访问这条数据,然后进行操作,这个事务读取的是尚未更新的脏数据。
示例:
1、假设:事务X,事务Y,表中初始值initial=100。
2、演绎过程:
a.事务X:
  a1.读取initial=100
  a2.initial=initial-10; -->90
  a3.initial=initial+5; -->95
  a4.提交事务commit.
B.事务Y:
  b1.事务X进行到a2,此时表中的数据是90;
  b2.Y开始读取initial值,90,但X尚未提交完整;
  b3.然后X进行第三步, initial值更新为95。
X提交之前,Y获取的90 就是脏数据。




不可重复读前提条件:第二个事务多次访问同一行而且每次读取不同的数据时,会发生不一致的分析问题
示例:
1、假设:事务X,事务Y,表中初始值initial=100。
2、演绎过程:
a.X读取initial=100,尚未完成操作;
b.Y读取initial=100,+100提交;
c.X再读取,Wow! 200

转载于:https://www.cnblogs.com/meisall/p/5319361.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值