在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
,即逻辑适用于 SX
和 X
锁,只要 select 语句没有 where
子句。但是在第一种方法中,有机会限制受锁定操作影响的记录数。
commit
or rollback
should be issued to release the lock for both cases(
SX
or X
type locks ).
我想在 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
,即逻辑适用于 SX
和 X
锁,只要 select 语句没有 where
子句。但是在第一种方法中,有机会限制受锁定操作影响的记录数。
commit
orrollback
should be issued to release the lock for both cases(SX
orX
type locks ).