并发控制
来源:互联网 发布:苹果ipa发布网站源码 编辑:程序博客网 时间:2024/05/03 10:27
无论是在操作系统还是在数据库中,都不免有进程并发的操作,而进程并发不就难免会造成数据的错误(也称为时间的错误)
在操作系统中运用的是Pv操作解决并发的问题,今天我想说的是在数据库中如何避免并发带来的三个问题
1丢失更新的问题
2读取数据问题
3不可重复读问题
下面用例子来说明该问题
丢失更新的问题
丢失更新原因就在于 多个事务同时对一个数据操作,每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新。
例如:
当事务A和事务B同时修改某行的值,
1.事务A将数值改为1并提交
2.事务B将数值改为2并提交。这时数据的值为2,事务A所做的更新将会丢失。
时间
更新事务A
数据库中a的值
更新事务B
T0
100
T1
Find a
T2
Find a
T3
a:=a-30
T4
a:=a*20
T5
Upd a
T6
70
Upd a
T7
200
上面的实例我们可以看到,当程序正确执行的时候,结果是140或170。但是按表中的并发执行,结果A是200,原因就在于事务A的更新被事务B的被重写覆盖掉了,导致事务A的丢失。
读脏数据
在数据库技术中。我们把未提交随后被撤销的数据称为“脏数据”。
看实例
·
1.Mary的原工资为1000,财务人员将Mary的工资改为了8000(但未提交事务)
2.Mary读取自己的工资,发现自己的工资变为了8000,欢天喜地!(在缓存中读取)
3.而财务发现操作有误,回滚了事务,Mary的工资又变为了1000像这样,Mary记取的工资数8000是一个脏数据。
不可重复读
不可重复读,主要是同一个事务前后两次读取的结果不一致造成的
实例
1.在事务1中,Mary 读取了自己的工资为1000,操作并没有完成
2.在事务2中,这时财务人员修改了Mary的工资为2000,并提交了事务.
3.在事务1中,Mary 再次读取自己的工资时,工资变为了2000
事务1前后两次读取同一个数据出现不同的结果。这就造成的数据的不可重复读的问题。
以上三个问题是数据库事务并发中经常出现的问题。如何避免出现该问题呢。就需要对数据进行加锁。锁的问题下篇博客精彩讲述。
- 并发控制
- 并发控制
- 并发控制
- 并发控制
- 并发控制
- 并发控制
- 并发控制
- 并发控制
- 并发控制
- 并发控制
- 并发控制
- 并发控制
- 并发控制
- 并发控制
- 控制数据库的并发
- 数据库并发控制技术
- 数据并发控制
- PowerBuilder的并发控制
- 关于今天面试回答的不好的两个问题(垃圾回收机制和对象的排序)
- 最长公共子序列+打印路径
- Diophantus of Alexandria hdu 1299 数论之分解素因子
- 宇龙酷派202笔试题
- WGS 84 EGM96 15-Minute Geoid Height File and Coefficient File
- 并发控制
- 数字图像处理之特征提取及常用方法
- python中文件读取并展示的几种方法
- c++实验一 数据类型和表达式
- ext体验
- swift性能测试工具--COSBanch
- No JVM could be found on your system错误的解决办法
- Ubuntu12.04 挂载nfs文件系统
- 宇龙酷派笔试题 2014 武汉