日期:2014-05-17  浏览次数:20820 次

悲观锁的问题
孙卫琴的Hibernate一书中讲了悲观锁的实现,说:

由于Oracle默认的事务隔离级别为:Read Committed,没法保证并发的对同一条记录的update。

然后说用悲观锁能够解决,说有两种实现方式:
1、用select * from xxx for update这种语句
2、对于不支持上面这种语句的数据库采用在表中添加指示字段的方法,比如一个字段是布尔类型,true表示不能使用,false表示可以使用。每当一个事务想修改一条记录的时候,就先检查指示字段是不是为fasle。我的问题就出现在这块儿了,既然Oracle默认的事务隔离级别为Read Committed,那么在检查指示字段的真假时不是也就没法保证正确了么?这不是扯淡呢吗?还是我哪里理解的不对??请大牛们指教。。。

------解决方案--------------------
理解的没错。
第二种方法不靠谱。
------解决方案--------------------
不支持for update的数据库,不会是指sqlserver吧 :)
------解决方案--------------------
探讨

引用:

不支持for update的数据库,不会是指sqlserver吧 :)


哎呀 谢谢大牛 我的生命变得更有意义了。。。

------解决方案--------------------
探讨
孙卫琴的Hibernate一书中讲了悲观锁的实现,说:

由于Oracle默认的事务隔离级别为:Read Committed,没法保证并发的对同一条记录的update。

然后说用悲观锁能够解决,说有两种实现方式:
1、用select * from xxx for update这种语句
2、对于不支持上面这种语句的数据库采用在表中添加指示字段的方法,比如一个字段是布尔类型,true表示……