版本:7.0.0

SET TRANSACTION ​

功能描述 ​

本语句用于配置事务的隔离级别。事务隔离级别定义了当前事务的行为对其他并发执行事务的可见性。用户可通过调整隔离级别,提高对其他未提交事务的可见性,从而提升数据库的并发处理能力。

注意事项 ​

会话级事务隔离级别仅可在事务启动前配置,事务执行过程中不允许修改隔离级别。

语法格式 ​

-- 会话级 SET TRANSACTION ISOLATION LEVEL { SERIALIZABLE | READ COMMITTED | CURRENT COMMITTED }

-- 全局 ALTER SYSTEM SET DB_ISOLEVEL={ RC | CC } SHOW PARAMETER DB_ISOLEVEL

参数说明 ​

  • 会话级
    • SERIALIZABLE:事务隔离的最高级别,可实现事务之间的完全隔离。
    • READ COMMITTED:默认隔离级别,可确保不会读取到脏数据;单个 SQL 语句内读取的数据为同一版本的快照数据。
    • CURRENT COMMITTED:单个 SQL 语句内读取的数据中,每一行均为读取时刻最新的已提交数据,读取结果不再是快照数据。
  • 全局级
    • DB_ISOLEVEL:配置事务隔离级别,确保不会读取到未提交的脏数据。
    • RC:Read Committed,即读已提交,单个 SQL 语句内读取的数据为同一版本的快照数据,该级别为默认隔离级别。
    • CC:Current Committed,即当前已提交,单个 SQL 语句内读取的每一行数据均为读取时刻最新的已提交数据,读取结果不再是快照数据。

示例 ​

配置会话级事务隔离级别 ​

--删除表

DROP TABLE IF EXISTS salary_2025;

--创建表

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

--在事务未开始执行前设置隔离级别为READ COMMITED

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

--在事务中执行语句1

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

--在事务中执行语句2

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

--在事务中执行语句3

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

--提交整个事务

COMMIT;

配置全局事务隔离级别 ​

--查询事务中的全局隔离级别

SHOW PARAMETER DB_ISOLEVEL;

--设置事务的全局隔离级别为READ COMMITED;

ALTER SYSTEM SET DB_ISOLEVEL= RC;

--在事务中执行语句1

DROP TABLE IF EXISTS salary_2025;

--在事务中执行语句2

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

--在事务中执行语句3

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

--提交整个事务

COMMIT;