刚接触数据库。对数据库的锁比较迷惑。比如,我想选出一条记录,然后更新它。
那么如果我直接用update语句去更新它,数据库会自动的给该行记录加锁吧?可是如果我用(select * from A where id = 1 for update nowait;)这样加锁后
再用update语句去更新
和直接调用update语句去更新,让数据库为我加锁。这两者的区别是什么?
那么如果我直接用update语句去更新它,数据库会自动的给该行记录加锁吧?可是如果我用(select * from A where id = 1 for update nowait;)这样加锁后
再用update语句去更新
和直接调用update语句去更新,让数据库为我加锁。这两者的区别是什么?
解决方案 »
- ORACLA联查2张相同结构的表报错?在线等~~急啊~~
- 求助!!!关于ORA-24338:未执行语句句柄
- 資料欄的插入值過大
- 各位大虾求解,关于游标的open和close命令
- 问一个时间查询的问题...
- oracle查询一变量语句?
- Oracle里面这样查会影响效率吗?
- 请教一个关于OCI的问题
- 大家好!我是南京的,想找人合租房,不知道谁有合适的房子合租,谢谢!!地址是可以坐80路或者82路车,或者在建邺路,白下路附近也可以!
- 调用Oracle存储过程(返回记录),请高手指点!
- Oracle初学者:今天装了一个Oracle g11.之后试着连接,就遇到了ORA-12560: TNS: 协议适配器错误- Oracle
- 时间格式化奇怪问题,高手请进.
好像效果没有 select * from A where id = 1 for update 好,直接调用update语句去更新 ,就是不要用nowait就行了.
nowait 是有条件的,就是在锁之前还可进行其它的操作。select * from A where id = 1 for update nowait
command1
command2
commit;以上的效果也是锁表。
而 select * from table for update 是把加载上来的数据锁住等当前事务提交后别人才可以更新
使用 for update 没有提交事务时其它用户是不能更新的
此时 如果另一个用户也想更新当前数据就会出进入等待状态,直到当前事务提交
for update 给当前记录加锁 ,如果记录已经加锁的话,则等待锁释放,锁释放以后,此语句才能加锁
多谢指教。。可是,好像是我没说明白。。
我问的不是for update 和for update nowait的区别。
而是select * from A where id = 1 for update nowait;-->update A set .. where id = 1
和直接写update A set .. where id = 1的区别。
我觉得这两种方式都可以为id为1的行加上锁,那么区别在哪里?