zoukankan      html  css  js  c++  java
  • oracle锁的理解

    这里给定表结构为

       test(id number,name varchar2(20));

       数据为:

       insert into test values(1,'hello');

       insert into test values(2,'world');

       insert into test values(13,'test');

    1.行级别的锁

       在sqlplus的客户端1给某行添加锁

         select * from test where id=1 for update  

          --此时在客户端1中 id为1的记录被锁定  其他的客户端假设为2 只能查询id为1的记录 删和改的操作会一直等待 等待当前客户端1释放锁(也就是提交和回滚事物)  客户端2 也不能获取行级别的锁  假设在客户端2中 也执行了select * from test where id=1 for update  那么会一直等待客户端1释放锁(也就是事物提交和回滚)

        可以在客户端2指定为  select * from test where id=1 for update nowait  意思是客户端1已经锁定乐行 我这里不能锁定 我这里直接不等待 直接抛出异常退出

       SQL> select * from test where id=1 for update nowait;
    第 1 行出现错误:
    ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源

        也可以指定时间为等待多久  如果客户端1 一直不释放  到超过指定时间后  就不等待了 直接抛出异常退出

       SQL> select * from test where id=1 for update wait 5;--这里5秒 对方还没释放 直接异常退出 作别的操作去 等会再来吧 呵呵
                *
    第 1 行出现错误:
    ORA-30006: 资源已被占用; 执行操作时出现 WAIT 超时

    1.表级别的锁

    行共享:允许用户进行任何操作,禁止排他锁
    lock table userinfo in row share mode;
    行排他:允许用户进行任何操作,禁止共享锁
    lock table userinfo in row exclusive mode;
    共享锁:其他用户只能看,不能修改  【客户端1和客户端2 可同时添加共享锁 但是都不能修改】
    lock table userinfo in share mode;
    共享行排他:比共享锁有更多限制
    lock table userinfo in share row exclusive mode;
    排他锁:其他用户只能看,不能修改,不能加其他锁 【客户端1加了排它锁 客户端2 无法添加排它锁和其他任何锁】
    lock table userinfo in exclusive mode;




  • 相关阅读:
    多线程上传和下载大文件(当文件服务器对上传文件大小有限制)
    http和https的区别?
    将数据导出到 excel ,然后下载下来
    注解@Transactional(rollbackFor = Exception.class) 的用法
    浅谈 MongoDB
    浅谈负载均衡
    join,left join,inner join,full join的区别?
    Bootstrap如何适配移动浏览器
    常用正则表达式
    js获取节点
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331248.html
Copyright © 2011-2022 走看看