---
title: "MySQL 模式的事务隔离级别 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: MySQL 模式的事务隔离级别 MySQL 模式支持的隔离级别 OceanBase 数据库在 MySQL 模式下，支持四种隔离级别： 读未提交（Read Uncommitted）：一个事务可以读取到另一个事务未提交的数据。当事务 A 修改一个数据项但尚未提交，事务 B 可以立即看到这些未提交的更改。如果事务 A 回滚…
---
切换语言

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

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

# MySQL 模式的事务隔离级别

更新时间：2026-03-12 20:58:04

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/700.reference/100.oceanbase-database-concepts/800.transaction-management/200.transaction-concurrency-and-consistency/400.transaction-isolation-level/300.transaction-isolation-level-of-mysql-mode.md)  

## MySQL 模式支持的隔离级别

OceanBase 数据库在 MySQL 模式下，支持四种隔离级别：

- 读未提交（Read Uncommitted）：一个事务可以读取到另一个事务未提交的数据。当事务 A 修改一个数据项但尚未提交，事务 B 可以立即看到这些未提交的更改。如果事务 A 回滚更改（即取消它的操作），事务 B 读取的数据就会变成之前存在的、但现在已经不存在的“脏”数据。当前 OceanBase 仅语法上支持*读未提交（Read Uncommitted）*隔离级别，当用户指定**读未提交**的隔离级别时，实际使用的是**读已提交**。
 - 读已提交（Read Committed）：一个事务执行的查询，只能看到这次查询开始之前提交的数据。读已提交无法防止不可重复读和幻读两种异常情况。
 - 可重复读（Repeatable Read）：事务内不同时间读到的同一批数据是一致的。
 - 可串行化（Serializable）：该隔离级别类似 Oracle 数据库的 Serializable，并非严格意义上的 Serializable。

OceanBase 数据库默认的隔离级别为**读已提交（Read Committed）**。

## 隔离级别行为对比

MySQL 数据库支持**读未提交**、**读已提交**、**可重复读**和**可串行化**四种隔离级别，OceanBase 数据库的 MySQL 模式在这四种隔离级别上与 MySQL 数据库均有一定差异。

- **读未提交**： MySQL 数据库支持**读未提交**，而 OceanBase 数据库仅支持**读未提交**语法。当前 OceanBase 仅语法上支持*读未提交（Read Uncommitted）*隔离级别，当用户指定**读未提交**的隔离级别时，实际使用的是**读已提交**。
 - **读已提交**： 在**读已提交**隔离级别下判断行是否满足更新条件时，MySQL 数据库使用半一致性读，如果一行已经被并发事务更新，MySQL 数据库会等待并发事务的结束，然后在最新版本上判断是否需要更新；而在 OceanBase 数据库中，无论并发事务是否更新，总是基于语句快照中的版本来判断一行是否满足更新条件。
 - **可重复读**： 在**可重复读**隔离级别下发生写冲突时，MySQL 数据库中后写的事务会等待先写的事务结束，如果先写的事务回滚，后写的事务则在原版本上直接更新，如果先写的事务提交，**后写的事务会在新提交的版本上再进行更新**；OceanBase 数据库中后写的事务会等待先写的事务结束，如果先写的事务回滚，后写的事务则在原版本上直接更新，如果先写的事务提交，**后写的事务会回滚并返回错误**。
 - **可串行化**： MySQL 数据库的**可串行化**隔离级别使用两阶段锁（2PL），能够保证严格的可串行化；OceanBase 数据库的**可串行化**隔离级别使用快照隔离（Snapshot Isolation），不能保证严格的可串行化。

## 隔离级别设置方法

设置隔离级别有两种方式，分别为 Global 级别和 Session 级别。

```sql
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL [READ COMMITTED | REPEATABLE READ | SERIALIZABLE | READ UNCOMMITTED];

```

## 隔离级别使用限制

- 不允许在事务执行过程中设置隔离级别，否则会报如下错误：

  ```sql
  ERROR 1568 (25001): Transaction characteristics can't be changed while a transaction is in progress

  ```
 - Global 级别的隔离级别可以被 Session 级别的隔离级别覆盖。

 上一篇 下一篇 ![有帮助](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) 咨询热线
