ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 悲观锁定的应用

悲观锁定的应用

原创 Linux操作系统 作者:paulyibinyi 时间:2008-03-26 11:14:13 0 删除 编辑

今天同事发过来的一个问题:

悲观锁定

xxxx 2008年03月26日 10:02:18
paul,问一下。 锁表是需在开始事务之前做,还是之后做?
Paul Yi(Paul Yi) 2008年03月26日 10:02:51
事务之前
xxxx 2008年03月26日 10:03:17
那解锁是在提交事务之后?
Paul Yi(Paul Yi) 2008年03月26日 10:04:29
锁住了这个表还有对这个表其他相关事务操作吗
xxxx 2008年03月26日 10:05:38
是的。

1锁表
2开始事务
3对该表查询
4插入或更新
5提交事务
6解锁
Paul Yi(Paul Yi) 2008年03月26日 10:07:11
锁住了这个表查询应该可以但不能对这个表作插入或更新数据吧
xxxx 2008年03月26日 10:08:33
如果有一个业务需要先查询有没有记录,有的话更新该记录,没有的话要插入一条。
但这个业务是并发的,那要怎样处理?
xxxx 2008年03月26日 10:09:05
我想是先锁表,然后判断有无存在的记录,处理完后解锁。这样来处理并发问题。
xxxx 2008年03月26日 10:09:19
就不会因为并发,同时插入两天一样的记录
xxxx 2008年03月26日 10:09:25
两条
Paul Yi(Paul Yi) 2008年03月26日 10:11:40
select * from table for update 这样你看下
4插入或更新
5提交事务
6解锁
xxxx 2008年03月26日 10:13:14
什么时候开始事务?
Paul Yi(Paul Yi) 2008年03月26日 10:13:40
select * from table for update 这个就开始了
xxxx 2008年03月26日 10:14:26
1。开始事务
2。select * from table for update
3。插入或更新
5。提交事务

这样的话,就算并发,它也会锁死在第2步中
Paul Yi(Paul Yi) 2008年03月26日 10:14:40
他这个是锁住记录,并没锁表
xxxx 2008年03月26日 10:16:19
锁住所有记录的话,并发时会停在第2步中,这样就不会有问题了
Paul Yi(Paul Yi) 2008年03月26日 10:17:06
其他用户只能等解锁后才能对这个表进行更新或删除
xxxx 2008年03月26日 10:18:43
流程:
1。开始事务
2。select * from table for update
3。查找所要的记录是否存在
4。根据第3步的结果进行插入或更新
5。提交事务
xxxx 2008年03月26日 10:19:09
这样并发操作会等在第2步中,不会因为并发而影相第3步的判断
Paul Yi(Paul Yi) 2008年03月26日 10:20:33
对  如果2步并发时不想让别人等待立即发出信息的话可以加上  select * from table for update nowait
并发用户看到的是资源正忙
xxxx 2008年03月26日 10:23:21
THX

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7199859/viewspace-217914/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 宝宝今天8个月了
请登录后发表评论 登录
全部评论
oracle 10g ocm oracle 10g/11g/12c ocp aix 6.1 administrator,ogg expert,ITSS 技术交流群 201703254 微信公众号 paulyibin 探讨技术,开心工作 电话 13719354869 ,深入研究数据库和开始研究big data

注册时间:2007-12-11

  • 博文量
    902
  • 访问量
    6505505