我想在oracle中锁定一个表,然后检查它是否被阻止, 但是我无法锁定桌子。 我试图这样做来锁定:
LOCK TABLE CLIENTS IN EXCLUSIVE MODE
这是对Lock的查询,但是我仍然可以在该表中更新
然后检查其是否被阻止:
SELECT COUNT(*) total FROM V$LOCKED_OBJECT l
INNER JOIN DBA_OBJECTS d ON l.object_id = d.object_id
WHERE d.object_type = 'TABLE' AND d.object_name = 'CLIENTS'
如何锁定表,然后检查其是否被php阻止。
答案 0 :(得分:2)
您可以使用for update
:
select * from clients for update
以独占模式(ROW_X (SX): Row Exclusive Table Lock
-> “锁定模式3” )锁定表的整个记录,但是不建议在生产系统中使用。至少仅锁定通过where
子句过滤的受限记录集。
您的语句(LOCK TABLE CLIENTS IN EXCLUSIVE MODE
)也会锁定整个表,并调用Exclusive (X): Exclusive Table Lock
-> “锁定模式6” 作为上面for update
的命令,即逻辑适用于SX
和X
锁,无论select语句是否没有where
子句。但是在第一种方法中,有机会限制受锁定操作影响的记录数。
应该发出
commit
或rollback
来释放这两种情况的锁定(SX
或X
类型的锁)。