• 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
    则获取不到数据
     
    证明猜猜是正确的
  • 相关阅读:
    Typecho
    iOS开发
    搭建自己的Git服务器
    Markdown
    微信使用篇
    bzoj2406 矩阵
    POI2010 Bridges
    上下界网络流总结
    TopCoder SRM 582 Div 1
    port命令记录
  • 原文地址:https://www.cnblogs.com/HansonYao/p/3740931.html
Copyright © 2020-2023  润新知