【问题标题】:Oracle equivalent of ROWLOCK, UPDLOCK, READPAST query hintsOracle 等效于 ROWLOCK、UPDLOCK、READPAST 查询提示
【发布时间】:2011-04-25 17:14:21
【问题描述】:

在 SQL Server 中,我在查询中使用了以下提示:

  • rowlock(行级锁定)
  • updlock(防止脏读)
  • readpast(不要阻塞等待行锁,转到第一个解锁的行)

例如

select top 1 data from tablez with (rowlock,updlock,readpast);

Oracle 是否有等效的查询内提示?

【问题讨论】:

    标签: sql oracle locking


    【解决方案1】:

    ROWLOCK 的等价物是 FOR UPDATE 子句

    select *
    from emp
    for update;
    

    自 11g 以来,Oracle 已经记录了 SKIP LOCKED 语法,它等同于 READPAST

    select *
    from emp
    for update skip locked;
    

    这种语法已经使用了很长时间(它是高级队列的基础),但如果它不在文档中,则不受支持,

    没有等效的UPDLOCK 锁,因为Oracle flat out 不允许脏读。了解更多。

    【讨论】:

    • 非常感谢。你确定你最后的陈述吗?看起来 FOR UPDATE 是 UPDLOCK 的替代品,而 ROWLOCK 更多的是关于所使用的锁的粒度。
    • 锁类型之间没有简单的一对一关系。 Oracle 中的 DML 由行级锁驱动。 Oracle 中没有共享读锁的概念,因为它使用不同的一致性机制。独占插入/更新/删除锁被保存在数据记录本身上。 Oracle 只使用表级锁来防止并发 DDL。
    猜你喜欢
    • 2011-09-17
    • 2016-04-20
    • 2013-11-21
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多