通常是通过select … from for update语句添加的,同时该方法也是我们用来手工锁定某些记录的主要方法。比如,当我们在查询某些记录的过程中,不希望其他用户对查询的记录进行更新操作,则可以发出这样的语句。当数据使用完毕以后,直接发出rollback命令将锁定解除。当表上添加了RS锁定以后,不允许其他事务对相同的表添加排他锁,但是允许其他的事务通过DML语句或lock命令锁定相同表里的其他数据行。
FOR UPDATE NOWAIT和 FOR UPDATE的区别
别的事务要对这个表进行写操作时,是等待一段时间还是马上就被数据库系统拒绝而返回.制定采用NOWAIT方式来进行检索,所以当发现数据被别的SESSION锁定中的时候,就会迅速返回ORA-00054错误,内容是资源正忙, 但指定以 NOWAIT 方式获取资源。所以在程序中我们可以采用NOWAIT方式迅速判断当前数据是否被锁定中,如果锁定中的话,就要采取相应的业务措施进行处理。
如:当先(1)SELECT * FROM TABLEA FOR UPDATE
然后再(2-1)SELECT * FROM TABLEA FOR UPDATE NOWAIT--直接返回错误;但是以(2-2)SELECT * FROM TABLEA FOR UPDATE执行会阻塞等待,直到(1)的提交或回滚掉
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-670539/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/35489/viewspace-670539/
本文介绍了如何使用SQL的select...from for update语句来手动锁定记录,以防止在查询过程中其他用户对这些记录进行修改。此外,还探讨了FOR UPDATE NOWAIT选项的作用,即当数据被其他会话锁定时,立即返回错误而非等待。
3109

被折叠的 条评论
为什么被折叠?



