最初由 applezh 发布
[B]看了expert one on one 关于悲观封锁和乐观封锁的章节,理解不是很深刻。
感觉在悲观就是在查询时如果有更新意图就锁定该行,而乐观封锁就是直接更新该行。
大家来谈谈这两种有什么区别,分别应用于那些场合??? [/B]
个人认为for update必须甚用,如果是操作频繁的表,这样会造成很严重的阻塞,编程上我倾向于使用update table1 set col1='..' where col1='...' 的方式防止误更新
update table1 set col1='..' where col1='...'这种方式适用性差了些,
当我要update不确定列的时候就无法写了;
for upadate是为了防止丢失更新的出现,它只是锁定行,就是只会阻塞对改行的更新;
oracle的行锁应该不是稀缺资源;
为了防止在整个事务中别人对该行的修改,或者业务必须防止丢失更新的出现,是要用for update 的; 可以指定nowait,使得其他的试图更新该行的动作都马上产生exception ,而不要排队等待对该行的锁定;