• Oracle 语句


    FOR UPDATE 语句

    FOR UPDATE 语句是用于锁住表的部分或全部数据(多用于pl/sql developer手动修改数据;也可以用来在Oracle函数中用来锁表数据,然后再执行操作数据的语句,以保证数据的唯一性)。

    锁住表的部分或全部数据的意思即除了当前执行for update这个事务,不允许其他的事务对锁住的数据进行增、删、改操作,这里体现了数据的唯一性。

    注意:正常情况下锁表,对数据进行操作后一定要记得commit提交因为正常情况下只有通过commit或者rollback才能解除锁。

    例:SELECT * FROM TABLE1 WHERE DEPTNO = 10 FOR UPDATE ;  --只对满足条件的部门编号为10的数据进行锁定

          SELECT * FROM TABLE1 WHERE  FOR UPDATE ;  --对TABLEFORTEST 表当前的所有数据进行锁定(即新增的数据不受影响,随便嗨)

    FOR UPDATE的延申用法:

    FOR UPDATE OF COLUMN、FOR UPDATE WAIT、FOR UPDATE NOTWAIT、FOR UPDATE  SKIP LOCKED

    例:SELECT * FROM TABLE1  E , TABLE2 D WHERE E.DEPTNO = D.DEPTNO AND E.DEPTNO = 10 FOR UPDATE  ; -- 锁定两个表中满足条件的行

           SELECT * FROM TABLE1  E , TABLE2 D WHERE E.DEPTNO = D.DEPTNO AND E.DEPTNO = 10 FOR UPDATE OF E.DEPTNO ;  

      --只会锁定TABLE1 表中满足条件的行

      FOR UPDATE OF E.DEPTNO(OF 后面跟的是哪张表及其列名【形式就是表名{表别名}.列名,这样更准确】就会锁定哪张表中满足条件的行)

           SELECT * FROM TABLE1 WHERE  FOR UPDATE WAIT  3; --执行这个语句时如果有另一个事务已经获取了这部分数据的锁进行数据操作,那么会根据设置的参数进行等待

      (参数的单位是秒,直接写值,不用带单位),超过这个时间后还无法获取到当前数据的锁就回返回错误信息②

           SELECT * FROM TABLE1 WHERE  FOR UPDATE NOWAIT ; --执行这个语句时如果有另一个事务已经获取了这部分数据的锁进行数据操作,那么会直接返回错误信息①

           SELECT * FROM TABLE1 WHERE  FOR UPDATE SKIP LOCKED; --执行这个语句时如果有另一个事务已经获取了这部分数据的锁进行数据操作,且这个事务要操作的数据

      和另一个事务操作的数据完全一致就会返回一个空的列表;如果数据只是部分重叠,那么就会返回当前事务和另一个事务未重叠部分的数据并加上锁。

    错误信息:

    ①ORA-00054:资源正忙,但指定以NOWAIT方式获取资源,或者超时失效

    ②ORA-30006:资源已被占用;执行操作时出现WAIT超时

    参考资料:http://www.360doc.com/content/19/0114/22/39573434_808893974.shtml

         https://www.cnblogs.com/zbj815/p/6844434.html

         https://blog.csdn.net/qq_35849955/article/details/100099725

         http://www.solves.com.cn/it/sjk/Oracle/2019-11-15/8054.html

    ------------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    洛谷 P1089.津津的储蓄计划
    AcWing 786.第k个数
    差分
    AcWing 798.差分矩阵
    AcWing 797.差分
    AcWing 796.子矩阵的和
    Python 初始—(项目 目录结构)
    Python 初始—(迭代器和生成器)
    Python 初始—(装饰器)
    Python 初始—(高阶函数)
  • 原文地址:https://www.cnblogs.com/flyingorchid/p/12163013.html
Copyright © 2020-2023  润新知