我看到这么一句话:“乐观锁直到你准备提交所作的更改时才将对象锁住,当你读取以及改变该对象时并不加锁”后半句怎么理解,特别是它说的更改该对象是不加锁???假设有一个事务 ,,在事务中有一个update语句,,加锁的时候发生在update这个语句执行时候??还是在这个事务commit的时候??
解决方案 »
- Oracle update语句有严重的疑问 高手请进
- 别人定义了一个视图,我怎么看定义的内容是什么?
- oracle数据分组问题
- 在模糊查询中,如果字段是字符型的,用select * from 表1 where nvl(zd1,' ') like '%%'显示的是全部记录,包括zd1的值为空的,但如果zd1是da
- sql server图片字段迁移到oracle无法使用~~高手救火
- 关于大数据量的查询优化!?
- 苦苦寻觅的一个问题:如何在数据库中创建一个方案?
- 如何建立如下约束?立即给分!
- 树形明细报表分类小计(根据科目类型),合计问题,急!!
- drop table ** 后表空间没有回收
- 请问想写在纯DOS下可以运行的程序,请问是TC2。0好呢还是TCPP3。0好?
- 运行EXE,无法连接数据库? 在线等!!
但是select for update 的锁和UPDATE 是一样的,,为什么select for update 锁后允许读
其实select for update 就是加的悲观锁。你在执行这句话后其实并没有真正修改数据,但数据已经被你加锁,其他人就不允许修改了。
不管加什么锁, oracle都允许读。注意的是在你修改数据并未提交前,读的是未修改的数据。
这是有条件的允许读。只允许读取那些未被锁定的行,即未落在for update 的where条件范围内的记录行。这是可重复读隔离级别的典型表现。
由于oracle的多版本性,只存在写阻塞写的问题