---
title: "LOCK TABLE - OceanBase 数据库 V4.3.5 | OceanBase 文档中心"
description: "LOCK TABLE 描述 该语句根据指定模式锁定一个或多个表、表的分区或者二级分区。 上锁的表将保持上锁状态，直至事务提交、回滚或者回滚到上锁前的 Savepoint。 说明 要锁定的表必须在用户自己的 Schema 中，或者用户必须具有 LOCK ANY TABLE 系统权限。 语法 LOCK TABLE [ s…"
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.3.5 LTS

# LOCK TABLE

更新时间：2026-07-15 20:42:46

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.5/zh-CN/700.reference/500.sql-reference/100.sql-syntax/300.common-tenant-of-oracle-mode/900.sql-statement-of-oracle-mode/300.dcl-of-oracle-mode/2000.lock-table-of-oracle-mode.md)  

## 描述

该语句根据指定模式锁定一个或多个表、表的分区或者二级分区。

上锁的表将保持上锁状态，直至事务提交、回滚或者回滚到上锁前的 Savepoint。

#### 说明

要锁定的表必须在用户自己的 Schema 中，或者用户必须具有 `LOCK ANY TABLE` 系统权限。

## 语法

```sql
LOCK TABLE [ schema. ]table_name

  [ partition_extension_clause]
    [, [ schema. ] table_name
      [ partition_extension_clause ]
     ]...
  IN lock_mode MODE
  [ NOWAIT
   | WAIT integer
  ] ;

partition_extension_clause:

    PARTITION (partition_name, ...)
  | SUBPARTITION (subpartition_name, ...)

```

## 语法说明

| **字段名称** | **描述** |
| --- | --- |
| table_name | 指定要锁定的表的名称。 |
| partition_name | 指定要锁定的分区的名称。 |
| subpartition_name | 指定要锁定的二级分区的名称。 |
| lock_mode | 指定锁定模式。OceanBase 数据库当前版本所支持的锁定模式如下：   - `ROW SHARE`：允许并发访问锁定的表，但禁止用户锁定整个表而进行独占访问。 - `ROW EXCLUSIVE` ：与 `ROW SHARE` 相同，但也禁止在 `SHARE` 模式下锁定表。在进行更新、插入或删除时，将自动获得 `ROW EXCLUSIVE` 锁。 - `SHARE`：允许并发查询，但禁止更新锁定的表。 - `SHARE ROW EXCLUSIVE`：用于查看整个表，并允许其他用户查看表中的行，但禁止其他用户在 `SHARE` 模式下锁定表或更新行。 - `EXCLUSIVE`：只允许对锁定的表进行查询，禁止对其进行其他操作。 |
| NOWAIT | 如果对执行的表、分区或者二级分区上锁时发生锁冲突，则指定 `NOWAIT` 可以让数据库立即将控制权返回给用户。在这种情况下，数据库会返回一条消息，以告知表、分区或子分区已被另一个用户锁定。 |
| WAIT | 如果发生锁冲突，那么语句应该等待冲突的锁释放，直到超时，即用户设置的 `interger` 时间（单位为秒）。`integer` 的取值没有限制。 |

## 示例

如下示例为创建二级分区表并对其执行分区上锁操作。

1. 创建二级分区表 `test`。其中，由 `SUBPARTITION TEMPLATE` 生成的二级分区名称为一级分区名称 + 's' + 二级分区模板名称，例如，`p0` 分区有二级分区 `p0ssp0`，`p0ssp1` 和 `p0ssp2`。

   ```shell
   CREATE TABLE TEST(col1 INT, col2 INT)
   PARTITION BY RANGE (col1)
   SUBPARTITION BY RANGE (col2)
     SUBPARTITION TEMPLATE
       (
       SUBPARTITION sp0 VALUES LESS THAN (3),
       SUBPARTITION sp1 VALUES LESS THAN (6),
       SUBPARTITION sp2 VALUES LESS THAN (9)
       )
   (
     PARTITION p0 VALUES LESS THAN (100),
     PARTITION p1 VALUES LESS THAN (200),
     PARTITION p2 VALUES LESS THAN (300)
   );

   ```
 2. 对整个表 `test` 上互斥锁。

   ```shell
   obclient> LOCK TABLE test IN EXCLUSIVE MODE;
   Query OK, 0 rows affected

   ```
 3. 对表 `test` 的一级分区 `p1` 上互斥锁。

   ```shell
   obclient> LOCK TABLE test PARTITION (p1) IN EXCLUSIVE MODE;
   Query OK, 0 rows affected

   ```
 4. 对表 `test` 的二级分区 `p1ssp1` 上互斥锁。

   ```shell
   obclient> LOCK TABLE test SUBPARTITION (p1ssp1) IN EXCLUSIVE MODE;
   Query OK, 0 rows affected

   ```
 5. 对表 `test` 的多个分区上互斥锁。

   ```shell
   obclient> LOCK TABLE test PARTITION (p1，p2) IN EXCLUSIVE MODE;
   Query OK, 0 rows affected

   ```
 6. 对表 `test` 的多个二级分区上互斥锁。

   ```shell
   obclient> LOCK TABLE test SUBPARTITION (p0ssp1，p1ssp2) IN EXCLUSIVE MODE;
   Query OK, 0 rows affected

   ```
 7. 对表 `test` 的多个分区和二级分区上互斥锁。

   ```shell
   obclient> LOCK TABLE test PARTITION (p1, p2), test SUBPARTITION (p0ssp0, p0ssp1) IN EXCLUSIVE MODE;
   Query OK, 0 rows affected

   ```
 8. 对表 `test` 不存在的分区上互斥锁。如下示例中 `p3` 分区不存在，但是 `p0` 分区也不会上锁成功，整条语句将回滚。

   ```shell
   obclient> LOCK TABLE test PARTITION (p0, p3) IN EXCLUSIVE MODE;
   OBE-02149: Specified partition does not exist

   ```
 9. 在两个客户端上分别对表 `test` 上锁，其中持锁客户端上互斥锁，请求锁客户端上共享锁。 当 `LOCK TABLE` 语句不设置 `WAIT N`/`NOWAIT` 关键字时，其超时时间将取决于语句超时时间和事务超时时间的最小值，在该示例中即为 1 秒后将报出锁冲突的错误。

   ```shell
   # conn1
   obclient> START TRANSACTION;
   Query OK, 0 rows affected
   obclient> LOCK TABLE test IN EXCLUSIVE MODE;
   Query OK, 0 rows affected

   # conn2
   obclient> START TRANSACTION;
   Query OK, 0 rows affected
   obclient> SET ob_trx_timeout = 10000000000; # 10000 秒
   Query OK, 0 rows affected
   obclient> SET ob_query_timeout = 1000000;   # 1 秒
   Query OK, 0 rows affected

   # 请求客户端在 1 秒后将报出锁冲突的错误
   obclient> LOCK TABLE test IN SHARE MODE;
   OBE-30006: resource busy; acquire with WAIT timeout expired

   ```
 10. 在两个客户端上分别对表 `test` 上表锁，其中持锁客户端上互斥锁，请求锁客户端上共享锁，并使用 `NOWAIT` 关键字。 当 `LOCK TABLE` 语句设置了 `NOWAIT` 关键字后，如果遇到表锁冲突将会立即报错，并在报错信息中体现“NOWAIT”信息。该报错信息与语句不设置 `WAIT N`/`NOWAIT` 关键字不同。

    # conn2
    obclient> START TRANSACTION;
    Query OK, 0 rows affected
    obclient> LOCK TABLE test IN SHARE MODE NOWAIT;
    OBE-00054: resource busy and acquire with NOWAIT specified or timeout expired

    ```
 11. 在两个客户端上分别对表 `test` 上表锁，其中持锁客户端上互斥锁，请求锁客户端上共享锁，并使用 `WAIT N` 关键字。 当 `LOCK TABLE` 语句设置了 `WAIT N` 关键字后，如果遇到表锁冲突将会等待 N 秒，在 N 秒后未解锁将报错，并在报错信息中体现“timeout expired”信息。该报错信息与语句不设置 `WAIT N`/`NOWAIT` 关键字不同。

    # conn2
    obclient> START TRANSACTION;
    Query OK, 0 rows affected

    # 请求客户端在 1 秒后将报出锁冲突的错误
    obclient> LOCK TABLE test IN SHARE MODE WAIT 1;
    OBE-00054: resource busy and acquire with NOWAIT specified or timeout expired

    ```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
