乐观锁的理解问题 我看到这么一句话:“乐观锁直到你准备提交所作的更改时才将对象锁住,当你读取以及改变该对象时并不加锁”后半句怎么理解,特别是它说的更改该对象是不加锁???假设有一个事务 ,,在事务中有一个update语句,,加锁的时候发生在update这个语句执行时候??还是在这个事务commit的时候?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 执行UPDATE语句的时候,就在受影响的记录上加排他锁,并同时在表上加共享锁。commit时取消锁定。 加了排它锁,,是不是就不允许读了 !!但是select for update 的锁和UPDATE 是一样的,,为什么select for update 锁后允许读 加了排它锁是指不允许其他人修改了,不是不允许读!其实select for update 就是加的悲观锁。你在执行这句话后其实并没有真正修改数据,但数据已经被你加锁,其他人就不允许修改了。不管加什么锁, oracle都允许读。注意的是在你修改数据并未提交前,读的是未修改的数据。 为什么select for update 锁后允许读?这是有条件的允许读。只允许读取那些未被锁定的行,即未落在for update 的where条件范围内的记录行。这是可重复读隔离级别的典型表现。 我理解是,for update 和update 一样是获取排他锁;;;排他锁是独占锁,但是在oracle中才用是多版本,所以可以读 个人认为,1楼5楼正解,由于oracle的多版本性,只存在写阻塞写的问题 oracle中的查询问题,要把列变成表头,急!!!!!!!!!!!! 数据库中 怎样抓取sql? 关于逻辑运算符的问题???? 散分,散分,刚学Oracle,会个面! oracle问题 (imp出问题)欢迎大家讨论 PL/SQL问题 请问如何能恢复数据??????急急急!!!! 关于connect by的一个问题,请教高人! long_to_char 函数 备份文件恢复数据库 请问想写在纯DOS下可以运行的程序,请问是TC2。0好呢还是TCPP3。0好? 运行EXE,无法连接数据库? 在线等!!
但是select for update 的锁和UPDATE 是一样的,,为什么select for update 锁后允许读
其实select for update 就是加的悲观锁。你在执行这句话后其实并没有真正修改数据,但数据已经被你加锁,其他人就不允许修改了。
不管加什么锁, oracle都允许读。注意的是在你修改数据并未提交前,读的是未修改的数据。
这是有条件的允许读。只允许读取那些未被锁定的行,即未落在for update 的where条件范围内的记录行。这是可重复读隔离级别的典型表现。
由于oracle的多版本性,只存在写阻塞写的问题