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

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

事务:完整的做一件事。
并发操作带来的问题与描述:
并发可能的问题 问题描述
丢失修改 前提条件:两个或多个事务选择同一条数据,然后基于最初选定的值进行更新操作。
示例:
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
posted @ 2016-03-25 14:25  meisall  阅读(1274)  评论(0编辑  收藏  举报