你的位置:首页 > 数据库

[数据库]锁和并发(一)【2015.12.16】


并发控制模型

  1.悲观并发控制:

    A.默认冲突存在,当前进程通过获取当前数据的锁阻止其他进程的访问。

    B.读与写之间是相互阻塞。

  2.乐观并发控制:

    A.使用行版本控制保持数据被操作前的状态。

    B.读与写之间不会相互阻塞;但是写会发生阻塞,SQL SERVER会把冲突的错误信息发送给上层的应用程序。

事务造成的数据行为

  1.丢失更新

     当两个进程都读取数据A并修改了数据值,就会造成某个进程修改的数据值被覆盖。

       数据A=10

 时间进程1  进程2
 1SELECT A  
 2 SELECT A 
 3UPDATA A=A+10  
 4 UPDATE A=A+20 

 

 

 

 

 

       
       运行完,数据A=30

       进程1对数据A的修改被丢失了。

  2.脏读

     进程1修改数据A值但未提交,进程2读取了修改后的数据A,随后进程1又回滚了对数据A的修改,造成进程2读取了不一致的状态值。

       数据A=10

 时间进程1  进程2
 1UPDATA A=A+10(未提交) 
 2 SELECT A 
 3UPDATA A=A-10(回滚) 

 

 

 

 

 

       
       A值本身没有变化,但是进程2读取的A值为20。

  3.不可重复读

     进程1读取数据A之后,进程2修改了数据A,进程1再次读取A值,与之前读取的A值不一致。

  4.幻影

     这种行为发生在一个数据集内的部分数据被修改。