数据库并发操作
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
悲观锁的问题 1. 悲观锁性能差,不能并发操作,只能排队等 待处理.实际上,查询的操作完全可以并发处 理的. 2.可移植性差,依赖于特定数据库,而且并不是 2. , 所有数据库提供悲观锁. 悲观锁的优点 数据库级别的解决办法,从而有效的保证的数 据的正确性;通过各种途径操作数据库(java项 目,pl/sql developer…),都会得到很好的保护.
用户A保存 1.查询时得到的version=100 2.现在最新的version=100 因此允许保存,将version加1
用户B保存
key
v1
version 100
001 d 保存
乐观锁的优点 1.性能较高,可以并发操作 2.可移植性好,没有使用特定数据库技术 乐观锁的缺点 1.程序编写复杂 2.对数据的保护不彻底 假设A用户使用java开发的应用程序修改数据 B使用pl/sql developer修改这条记录 由于乐观锁是我们在java开放的应用程序中实 现的,因此不能控制B用户的保存
罗代均 2007-10-22
数据库并发操作的问题 悲观锁 乐观锁
时间线 key v1 v2 null 001 null 保存 用户A查询 用户B查询 key v1 v2
由于用户B保存的 时候,并不知道数 据已经被用户A修 改,这样当B保存 后,就会覆盖掉用 户A保存的数据
001 null 保存
null
时间线 key v1 version 100 001 a 保存 用户A查询 用户B查询 key
用户B保存 1.查询时得到的 version=100 2.最新的 version=101 因此不允许保存
v1 version 100
001 a 保存
key
v1
version 101
用户A保存
001 c 保存
讨论时间!
�
数据库并发操作的问题 悲观锁 乐观锁
应用程序级的解决办法 1.给表加一个version字段 2.查询时,得到version的值,假设为100 3.保存时,查询取得最新的version值, 如果取得的最新version值等于100,将 version加1,保存 4.保存时,查询取得最新的version值, 如果取得的最新version值不等于100,则说 明之前有其它用户修改过这条数据,因此不允 许保存
key
v1
v2 900
用户A保存
001 null 保存
用户B保存
Βιβλιοθήκη Baidu
key
v1
v2 null
001 abc 保存
数据库并发操作的问题 悲观锁 乐观锁
数据库级别的解决办法 读取一条记录时,数据库将这条记录锁定,不 允许其它用户读取 oracle的for update可以锁定行 比如:select * from employee where empno='001' for update; 这样,001这条记录就被锁定,其它用户就不 能更改这条记录(遗憾的是,可以查询),直到 提交事务,解除锁定.由于锁定时允许查询, 这样读取的到数据有可能是脏数据.