更新时间:2025-05-29 GMT+08:00
LockRows
算子说明
LockRows算子用于锁定查询结果集中的行,以防止其他事务对这些行进行修改或删除。
典型场景
- 事务中使用SELECT ... FOR SHARE/UPDATE锁定行,防止其他事务对这些行进行修改或删除。
- 使用FOR SHARE锁定行时,当前事务和其他事务都无法修改或删除锁定行。
- 使用FOR UPDATE锁定行时,除了当前事务,其他事务都无法修改或删除锁定行。
示例
示例:SELECT FOR UPDATE语法。
--数据准备。 gaussdb=# CREATE TABLE t(a int, b int, c int); CREATE TABLE gaussdb=# INSERT INTO t VALUES(generate_series(1, 10), generate_series(601, 610), generate_series(901, 910)); INSERT 0 10 --执行结果。 gaussdb=# EXPLAIN SELECT * FROM t WHERE a = 1 FOR UPDATE; QUERY PLAN ---------------------------------------------------------- LockRows (cost=0.00..34.41 rows=10 width=18) -> Seq Scan on t (cost=0.00..34.31 rows=10 width=18) Filter: (a = 1) (3 rows) --删除。 gaussdb=# DROP TABLE t;
示例:SELECT FOR SHARE语法。
--数据准备 gaussdb=# DROP TABLE IF EXISTS t; gaussdb=# CREATE TABLE t(a int, b int, c int); CREATE TABLE gaussdb=# INSERT INTO t VALUES(generate_series(1, 10), generate_series(601, 610), generate_series(901, 910)); INSERT 0 10 --执行结果。 gaussdb=# EXPLAIN SELECT * FROM t WHERE a = 1 FOR SHARE; QUERY PLAN ---------------------------------------------------------- LockRows (cost=0.00..34.41 rows=10 width=18) -> Seq Scan on t (cost=0.00..34.31 rows=10 width=18) Filter: (a = 1) (3 rows) --删除。 gaussdb=# DROP TABLE t;
上述示例中,LockRows算子输出信息如下所示。
信息名称 |
含义 |
---|---|
LockRows |
算子名称。 |
Seq Scan |
算子名称。 |
父主题: 运算符