版本:7.0.0

LOCK TABLE ​

功能描述 ​

本语句用于对数据库表执行锁定操作。

注意事项 ​

-- 执行本语句的用户需具备LOCK ANY TABLE系统权限,sys用户、表的属主用户除外

-- LOCK TABLE命令仅可在事务内执行,事务执行commit或rollback时,锁定的表会自动解锁

语法格式 ​

LOCK TABLE { [ schema_name. ]table_name } [ , ... ] IN lockmode MODE

其中lockmode子句取值为:{ SHARE | EXCLUSIVE }

参数说明 ​

  • [ schema_name. ]:即模式所属用户名,未显式指定时,默认取值为当前登录用户。
  • table_name:待锁定的表名称,可携带模式名前缀;语法中声明的表顺序即为加锁顺序,取值范围为已存在的表名。
  • SHARE:共享锁,允许并发执行查询、增删改等 DML 操作,但禁止对表结构执行修改(即 DDL 操作);除显式加锁外,DML 语句会自动申请该类型锁。
  • EXCLUSIVE:排他锁,仅允许对目标表执行并发查询,禁止其他所有操作;该锁模式除显式添加外,修改表结构的 DDL 命令会自动在用户表上申请,部分操作也会在系统表上申请。

示例 ​

锁定表salary_2025

--删除表salary_2025

DROP TABLE IF EXISTS salary_2025;

--创建表salary_2025

CREATE TABLE salary_2025(id INT NOT NULL, name CHAR(50), job VARCHAR(30), salary NUMBER);

--锁定表salary_2025

LOCK TABLE salary_2025 IN SHARE MODE;

--向表salary_2025中插入数据

INSERT INTO salary_2025(id, name, job, salary) VALUES(23,'liubei','manager',10000);

--向表salary_2025中插入数据

INSERT INTO salary_2025(id, name, job, salary) VALUES(24,'guanyu','tester',8000);

--向表salary_2025中插入数据

INSERT INTO salary_2025(id, name, job, salary) VALUES(25,'zhangfei','developer',8000);

--提交

COMMIT;