事务并发——并发控制(加锁)

原创 2007年09月22日 09:15:00
事务处理中的并发控制:
1.并发操作
数据库是一个共享资源,允许多个用户程序并行地存取数据库,所以当多个用户并发地存取同一数据,就可能出现数据的不一致性。例如:假设有两个事务T1T2,它们都需要读出并修改数据A,其执行情况如下所示:
执行顺序
1
2
3
4
5
6
事务T1
A
A=A+10
 
提交A
 
提交A
事务T2
 
 
A
 
A=A-30
 
T1工作区中A的值
30
40
40
40
40
40
T2工作区中A的值
 
30
30
30
0
0
数据库中A的值
30
30
30
40
40
0
2.导致结果
正常情况下最后数据库中A的值应该是10,可结果确是0
3.产生原因
由于事务的并发操作,当T1读取A并准备修改时,T2也读取了A,这样T1T2读取的都是30,当T1在第四步将修改后的结果写回数据库,T2接着在第6步也将它的修改结果写回数据库中,这样就将T1的修改结果给覆盖了。
4.解决办法——加锁
在事务要对数据库进行操作前,禁止其他事务再对该数据进行操作。
执行顺序T1
 Lock A
Read A
A=A+10
Write A
Unlock A
T2
Lock A
Read A
A=A-30
Write A
Unlock A
这样最后数据库中A的值就是10而不是0。
【注意】通过采用数据库的加锁机制便可避免由于事务并发而导致的错误,但是对事务加锁并不能解决所有的并发操作,也不是并发控制的唯一办法。
 

相关文章推荐

PHP_MySQL高并发加锁事务处理

1、背景: 现在有这样的需求,插入数据时,判断test表有无username为‘mraz’的数据,无则插入,有则提示“已插入”,目的就是想只插入一条username为‘mraz’的记录。 2、一般...
  • mlx212
  • mlx212
  • 2016年05月20日 16:02
  • 4555

串行等价化 事务 并发 加锁 死锁

串行等价性,满足串行等价性的事务,可以让CPU在不同事务间切换,轮有执行。这样的当事务中含有需要长时间访问磁盘的操作时,就可以执行其他事务,提供资源利用率。同时对于短事务可以降低响应时间。     ...

C++并发编程2——为共享数据加锁(三)

死锁的概念略去不说,死锁有可能发生在使用多个互斥量的场景下,也可能存在没有使用互斥量的场景...

C++并发编程2——为共享数据加锁(四)

本节会阐述保护共享数据的替代方案,很多情况下,使用互斥量并不合适,会带来性能消耗。下文会详细讲解集中通用的场景。...

C++并发编程2——为共享数据加锁(二)

上一节说到,std::mutex并不能完全解决保护数据的问题。存在好几种情况,即使我们已经使用了互斥量,数据还是被破坏了。...

C++并发编程2——为保护数据加锁(一)

在应届生面试的时候,很多面试官都会问——“多线程如何共享资源”。在操作系统层面上可以给出若干关键词答案,但是在语言层面,这个问题考虑的就没有那么简单了。...

SQL server数据库并发控制--加锁

http://blog.csdn.net/zdplife/article/details/48035837 当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作...

数据库并发控制机制——事务

  • 2013年05月16日 14:55
  • 35KB
  • 下载

深入理解Mysql——锁、事务与并发控制(辟谣)

mysql用的时间也不短了,但从没有做过总结。今天就来总结一下吧mysql服务器逻辑架构每个连接都会在mysql服务端产生一个线程(内部通过线程池管理线程),比如一个select语句进入,mysql首...
  • lemon89
  • lemon89
  • 2016年05月23日 00:21
  • 3329

Java并发编程实战--双重检查加锁( double check lock)与延迟初始化占位

DCL     在任何一本介绍并发的书中都会讨论声名狼藉的双重检查加锁(DCL)。      下图来自:http://zoroeye.iteye.com/blog/2058889      DCL...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:事务并发——并发控制(加锁)
举报原因:
原因补充:

(最多只允许输入30个字)