zoukankan      html  css  js  c++  java
  • FOR UPDATE SKIP LOCKED

    SYS_UNIT 中有UNIT_ID
    0000000001
    0000000002
    0000001100
    原意为若启用多线程,则每个线程在获取时仅可以获取一条数据(互斥)
    脚本如下
    1、SELECT * FROM SYS_UNIT s
        where s.unit_id=(
                SELECT unit_id FROM (
                            SELECT * FROM SYS_UNIT T ORDER BY T.UNIT_ID ASC
                            ) A WHERE ROWNUM<=1
                )
            FOR UPDATE  of s.unit_id SKIP LOCKED
    测试时,一个能获取 0000000001 另外一个则为空(当启用两个session时)
    猜猜:第一个session A 根据子查询获取 第一行数据  用外层查询得出第一条数据被加锁
               第二个Session B 根据子查询获取第一行数据,用外部查询得出第一条数据,又因为Skip lock 丢弃,顾查询不到任何数据了
     
    使用
    SELECT * FROM SYS_UNIT T
    where unit_id='0000000002'   FOR UPDATE SKIP LOCKED
    发现还是能获取到数据的,但是如果是
    SELECT * FROM SYS_UNIT T
    where unit_id='0000000001'   FOR UPDATE SKIP LOCKED
    则获取不到数据
     
    证明猜猜是正确的
  • 相关阅读:
    通过Internet使用VSS2005
    基于角色的权限设计(一)
    WFF架构及技术
    WFF概述
    企业库:Cache
    权限设计(二)
    应用系统中的编码和编码规则
    希望更多的人也可以来应用wordpress程序
    说说我的一点小感受了
    思维决定命运
  • 原文地址:https://www.cnblogs.com/HansonYao/p/3740931.html
Copyright © 2011-2022 走看看