
# LockRows
#### 算子说明
LockRows算子用于锁定查询结果集中的行，以防止其他事务对这些行进行修改或删除。
#### 典型场景
- 事务中使用SELECT ... FOR SHARE/UPDATE锁定行，防止其他事务对这些行进行修改或删除。
- 使用FOR SHARE锁定行时，当前事务和其他事务都无法修改或删除锁定行。
- 使用FOR UPDATE锁定行时，除了当前事务，其他事务都无法修改或删除锁定行。
 
#### 示例
**示例：**SELECT FOR UPDATE语法。
```
--数据准备 
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 UPDATE; 
                                  QUERY PLAN
-------------------------------------------------------------------------------
 Streaming (type: GATHER)  (cost=0.06..13.26 rows=1 width=18)
   Node/s: All datanodes
   ->  LockRows  (cost=0.00..13.16 rows=1 width=18)
         ->  Streaming(type: REDISTRIBUTE)  (cost=0.00..13.16 rows=1 width=18)
               Spawn on: datanode1
               ->  Seq Scan on t  (cost=0.00..13.16 rows=1 width=18)
                     Filter: (a = 1)
(7 rows)
--删除。
gaussdb=# DROP TABLE IF EXISTS 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
-------------------------------------------------------------------------------
 Streaming (type: GATHER)  (cost=0.06..13.26 rows=1 width=18)
   Node/s: All datanodes
   ->  LockRows  (cost=0.00..13.16 rows=1 width=18)
         ->  Streaming(type: REDISTRIBUTE)  (cost=0.00..13.16 rows=1 width=18)
               Spawn on: datanode1
               ->  Seq Scan on t  (cost=0.00..13.16 rows=1 width=18)
                     Filter: (a = 1)
(7 rows)
--删除。
gaussdb=# DROP TABLE t;
```
上述示例中，LockRows算子输出信息如下所示。
| 信息名称                | 含义               |
|:---|:---|
| LockRows            | 算子名称。            |
| Streaming           | 算子名称。            |
| Spawn on: datanode1 | 表示会分发到datanode1上 |
   
