zoukankan      html  css  js  c++  java
  • for update和for update nowait的区别和使用

    首先,for update 和for update nowait 是对操作的数据行进行加锁,在事务提交前防止其他操作对数据的修改。

    for update 和for update nowait主要区别在于是否等待,如果不加nowait,在执行select时就会报错,如果加了nowait,在执行select时就会等待,直至锁被释放。

    首先我们使用两个sql:

    1.select * from HH t where id='1' for update

    2.select * from HH t where id ='1' for  update nowait

    sql1在pl/sql中执行,sql2在ob12中执行(在pl/sql或ob12中开两个窗口执行不行,现在我也不知道为什么):

    执行sql1后查询出正确信息,在执行sql2,出现错误信息“ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效”。这是因为执行sql1时对改行的数据加了锁,其他操作是不能访问改行的。当我们在sql1后执行commit后,sql2就能显示正确的数据。

    将sql2换成for  update 按上面得步骤执行,sql2会一直等待锁得释放不会,直至sql1后commit,sql2就能查询出数据;

    这里还有 for  update wait n (n是时间,单位:秒),即会等待n秒,n秒之后数据还是锁住的话就会报上面提到的错误;

    其实for update 就是为了防止在查询数据的时候对数据进行修改,比如有以下两个sql:

    sql1:select * from HH t where id='1' for update

    sql2:update HH set name='张三' where id = '1'

    当我们执行sql1后,在执行sql2,sql2就会一直等待sql1将锁释放后才能执行,这样在查询的时候就不会出行数据改变,在sql1后执行commit,sql2就会自动执行了。

  • 相关阅读:
    Centos7 下安装docker
    在docker容器下安装airflow
    Windows 下部署 hadoop spark环境
    AirFlow功能展示个人笔记
    23.安装php和echarts进行结合展示图表
    22.把hive表中数据导入到mysql中
    21.根据hive绑定数据统计计算保存到hive表中
    20.采集项目流程篇之清洗数据绑定到hive表中
    【线程系列二】线程的五种状态
    数组、链表、和哈希表的区别
  • 原文地址:https://www.cnblogs.com/mouseIT/p/4174157.html
Copyright © 2011-2022 走看看