• 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
    则获取不到数据
     
    证明猜猜是正确的
  • 相关阅读:
    请求参数的中文乱码问题
    MySql索引与优化
    Android 兼容包
    Mysql 主从(转)
    解决tomcat一闪而过(转)
    log4j
    支付相关
    通过maven添加quartz
    linux命令学习之:chmod
    Nginx特点及其配置
  • 原文地址:https://www.cnblogs.com/HansonYao/p/3740931.html
Copyright © 2020-2023  润新知