在oracle中锁定一个table

Lock a table in oracle

我想在 oracle 中锁定一个 table 然后检查它是否被阻止, 但是我无法锁定 Table。 我试着这样做来锁定:

LOCK TABLE CLIENTS IN EXCLUSIVE MODE

这是对 Lock 的查询,但我仍然可以更新 table

然后检查它是否被阻止:

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'

如何锁定 table 然后检查它是否被 php 阻止。

你可以使用 for update :

select * from clients for update

以独占模式锁定table的全部记录(ROW_X (SX): Row Exclusive Table Lock --> "locked mode 3"),但不推荐用于生产系统。至少锁定由 where 子句过滤的受限记录集。

您的语句 (LOCK TABLE CLIENTS IN EXCLUSIVE MODE) 也锁定整个 table 并调用 Exclusive (X): Exclusive Table Lock --> "locked mode 6" 作为命令使用上面的 for update,即逻辑适用于 SXX 锁,只要 select 语句没有 where 子句。但是在第一种方法中,有机会限制受锁定操作影响的记录数。

commit or rollback should be issued to release the lock for both cases( SX or X type locks ).