我想在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阻止。
你可以使用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
型锁)。