OceanBase
  • 产品
  • 解决方案
  • 客户
  • 合作伙伴
  • 资源与服务
  • 文档
  • 社区
云控制台登录 / 注册
  • 免费试用
OceanBase AI 数据平台

基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。

一体化能力

TP 事务处理

关键业务稳定运行,保障数据零丢失

AP 实时分析

事务分析一体,驱动智能决策与运营

AI 现代负载

统一多模态数据,支撑生产级应用

关键产品
OceanBase 分布式数据库

首批通过安全可靠测评,面向关键业务

OceanBase 集中式数据库

集中式架构,兼具性能与成本优势

OceanBase AI 数据库

面向 AI 应用与 Agent 的多模数据库

OceanBase AI 湖库

湖库一体的 AI 多模态数据系统

OceanBase DataPilot

企业级 AI 数据分析 Agent

OceanBase Agentbase

企业级 Agent 后端基础设施

OceanBase OAgent

数据库 AI 运维 Agent

OB Cloud

一体化云数据库,提供多云一致体验

OceanBase 数据库一体机

软硬一体,极致性能与高可靠性保障

OceanBase AI 一体机

开箱即用的 AI 数据库一体机

OMA 迁移评估工具

全链路数据库迁移评估

OMS 数据迁移工具

一站式数据传输与同步

OCP 运维管理工具

数据库全生命周期管理

ODC 开发者工具

数据库开发与管控协同

OAS 自治服务工具

数据库智能诊断与自治

通用场景
全场景业务系统 OLTP
实时分析混合负载
异地多活
多基础设施部署
一站式传统数据库升级
混合云部署
一库多芯软硬件混合部署
分布式数据库单机部署
大存储类数据库降本
冷数据归档降本
多实例资源整合
分库分表一体化升级
高并发场景
数据中台
行业解决方案
国有大行和股份制银行核心系统解决方案
区域性银行核心系统解决方案
寿险核心系统解决方案
产险核心系统解决方案
资管交易类系统解决方案
资管 TA 清算类系统解决方案
运营商核心系统解决方案
人社核心系统解决方案
电力核心系统解决方案
行业专区
银行专区

助力银行完成各类核心业务系统升级

保险专区

寿险、产险核心系统升级的更佳选择

零售专区

助力200+零售行业客户规模化落地

DB 大咖说
OceanBase客户-爱奇艺爱奇艺

百亿级卡券业务的“单库双擎”架构升级

OceanBase客户-四川银行四川银行

800个测试用例选定分布式数据库

OceanBase客户-太平洋保险太平洋保险

先难后易,核心系统数据库升级复盘

行业案例
OceanBase客户-交通银行交通银行

核心数据库的“分布式革命”

OceanBase客户-中国移动中国移动

B域核心CRM&BOSS近乎零改造分布式升级

OceanBase客户-理想理想

打造领先的智能制造系统和自动驾驶体验

演讲实录
OceanBase客户-中国联通中国联通

集团应用分布式数据库覆盖B/O/M域

OceanBase客户-国泰海通国泰海通

智能推送系统稳定支撑单日亿级消息处理量

OceanBase客户-中国联合航空中国联合航空

中国首款机票盲盒背后的数据库力量

用户实践
OceanBase客户-北京银行北京银行

最快速度完成40余套系统国产数据库升级

OceanBase客户-VIVOVIVO

替换 MySQL 分库分表,探索成本效益最优

OceanBase客户-滴滴滴滴

数据库大规模运维体系建设及落地实践

合作伙伴
合作伙伴类型
联合解决方案
产业生态伙伴
经销商伙伴
技术服务伙伴
培训认证伙伴
生态联合解决方案
神州信息 x OceanBase 银行核心系统
长亮科技 x OceanBase 新核心系统
中电金信 x OceanBase 金融分布式核心系统
天阳科技 x OceanBase 贷记卡方案
易诚互动 x OceanBase 手机银行方案
恒生 x OceanBase UF3.0/O45/TA/估值方案
商业发行版
云树®数据库软件 ActionDB
服务
支持与服务
提交工单
软件下载
OceanBase 企业版
OceanBase 社区版
OB Cloud
学习
培训与认证
在线课堂
在线体验
开发者
开发者中心
资料
行业报告与白皮书
官方博客
年度发布会资料
开发者大会资料
oceanbase白皮书

金融核心系统数据库升级路径与场景实践

oceanbase白皮书

人社关键业务数据库一体化升级实践

产品文档
oceanbaseOceanBase 数据库
数据库一体机
oceanbaseOceanBase AI 数据库
工具与组件
oceanbaseOB Cloud 云数据库
驱动和中间件
快速上手
OceanBase 数据库
OB Cloud 云数据库
知识库
汇聚常见产品使用问题案例
在线体验

Demo与实验,感受 OceanBase 的核心能力与应用场景

OceanBase 最佳实践
了解 OceanBase 分布式数据库的架构与系统原理
技术博客

技术解析 | 用户实践 | 社区月报

在线课堂

电子书 |视频课程|在线培训

Developer Hub
应用开发Demo | 数据开发与集成工具
问答论坛

快速答疑 | 常见问题 | 技术交流

社区活动

Meetup | 技术公开课

GitHub

查看源码 | 贡献代码 | 建议反馈

加入社区

社区组织 | 社区用户贡献 |开发者贡献

进入社区首页
oceanbase数据库大赛

第六届OceanBase数据库大赛

oceanbase免费课程

《Easy Data x AI》:面向所有 AI 爱好者的 Data 与 AI 基础知识入门教程

切换语言
  • 中文站 - 简体中文
  • International - English
  • 日本站 - 日本語

OceanBase

OceanBase 海扬数据库始创于 2010 年,是完全自主研发的数据库公司。2020年开始独立商业化运作,历经15年大规模核心场景验证,目前是中国数据库的领军企业之一。从分布式数据库到 AI 数据库,为企业提供安全、稳定、可扩展的数据底座,推动数据基础设施全面拥抱 AI 时代。

关于我们

关于 OceanBase最新动态资质荣誉客户专家委员会招贤纳士合作伙伴年度发布会开发者大会

资源与服务

支持与服务文档知识库软件与工具下载培训与认证在线体验数据库专题视频

社区

快速上手开发者中心博客活动学习问答GitHub

数据库百科

分布式数据库国产数据库OLTP 数据库OLAP 数据库HTAP 数据库数据库向量数据库向量检索

联系我们

服务热线:
400-109-0633
商务咨询
培训认证技术支持媒体合作
京公网安备11010802047223号京公网安备11010802047223号
京ICP备20024574号-1
合字B1.B2-20250395
网站服务协议隐私协议安全响应协议
OceanBase 版权所有 © 2026 基础资源和备案服务由阿里云提供
文档反馈
  1. 文档中心
  2. OceanBase 数据库
  3. 分布式版
  4. V4.6.0
  5. 参考指南
  6. 系统原理
  7. 事务管理
  8. 事务并发和一致性
  9. 事务隔离级别
  10. 事务隔离级别概述
分布式版-V4.6.0
  • What's New
  • 简介
  • 快速上手
  • 应用开发
  • 部署
  • 升级
  • 数据迁移
  • 管理数据库
  • AP
  • AI
  • 生态集成
  • 实践教程
  • 参考指南
    • 系统原理
      • 数据库整体架构
      • 数据库的发展历程
      • 多租户架构
      • 数据库对象
      • 分布式数据库对象
      • 数据链路
      • 用户接口和查询语言
      • 事务管理
        • 事务
        • 事务并发和一致性
          • 数据并发性和一致性概述
          • 多版本读一致性
          • 并发控制
          • 事务隔离级别
            • 事务隔离级别概述
            • Oracle 模式的事务隔离级别
            • MySQL 模式的事务隔离级别
          • 弱一致性读
      • 存储架构
      • 数据可靠性和高可用
      • 数据库安全
      • OBServer 节点架构
    • 系统管理
    • 数据库对象管理
    • 数据库设计规范和约束
    • SQL 参考
    • PL 参考
    • 系统视图
    • 配置项和系统变量
    • 错误码
    • 性能调优
    • 数据库代理
    • 驱动
    • 平台产品
    • 组件 & 工具
    • 数据库插件
  • 常见问题
  • 版本发布记录
  • 术语
  1. 文档中心
  2. OceanBase 数据库
  3. 分布式版
  4. V4.6.0
  5. 参考指南
  6. 系统原理
  7. 事务管理
  8. 事务并发和一致性
  9. 事务隔离级别
  10. 事务隔离级别概述

事务隔离级别概述

更新时间:2026-06-13 17:33:56

github-fill编辑
编组分享

概述

隔离级别用于描述事务并发执行时互相干扰的程度。ANSI/ISO SQL 标准(SQL 92)基于事务执行过程中必须避免的异常情况定义了四种隔离级别,隔离级别越高,事务间的相互影响越小,允许出现的异常情况越少;在最高的隔离级别可串行化(Serializable)中,不允许出现任何异常情况。 其中这些需要避免的异常情况包括:

  • 脏读(Dirty Read):一个事务读到其他事务尚未提交的数据。

  • 不可重复读(Non Repeatable Read):曾经读到的某行数据,再次查询发现该行数据已经被修改或者删除。例如:select c2 from test where c1=1; 第一次查询 c2 的结果为 1,再次查询由于其他事务修改了 c2 的值,因此 c2 的结果为 2。

  • 幻读(Phantom Read):在执行请求中,当再次执行相同的搜索条件时,结果集中读取到了另一个已提交事务新插入的满足条件的行。

隔离级别种类

ANSI/ISO SQL 标准(SQL 92)定义了四种隔离级别,这四种隔离级别如下:

  • 读未提交(Read Uncommitted)

  • 读已提交(Read Committed)

  • 可重复读(Repeatable Read)

  • 可串行化(Serializable)

四种隔离级别以及它们对上述异常情况的容忍程度如下所示:

隔离级别 脏读 不可重复读 幻读
读未提交 可能 可能 可能
读已提交 不可能 可能 可能
可重复读 不可能 不可能 可能
可串行化 不可能 不可能 不可能

OceanBase 数据库隔离级别

OceanBase 数据库目前支持了以下几种隔离级别:

  • Oracle 模式

    • 读已提交(Read Committed)

    • 可串行化(Serializable)

  • MySQL 模式

    • 读未提交(Read Uncommitted)

    • 读已提交(Read Committed)

    • 可重复读(Repeatable Read)

    • 可串行化(Serializable)

      该隔离级别类似 Oracle 数据库的 Serializable,并非严格意义上的 Serializable。

OceanBase 数据库默认的隔离级别为读已提交(Read Committed)。

实际在 OceanBase 数据库中只实现了两种隔离级别,即读已提交和可串行化,当用户指定可重复读的隔离级别时,实际使用的是可串行化;与此同时,当用户指定读未提交的隔离级别时,实际使用的是读已提交。也就是说,OceanBase 数据库的可重复读的隔离级别更加严格,不会出现幻读的异常情况。OceanBase 数据库的读已提交不会出现脏读的异常情况,可能会出现不可重复读和幻读的异常情况;而可串行化不会出现脏读、不可重复读以及幻读的异常情况。

读已提交

在 OceanBase 数据库的读已提交隔离级别下,每条 SELECT 语句执行时仅能够读到在此之前所有已经提交事务的数据,而不会读到在语句执行过程中新提交或被并发事务修改的数据,就像是在每条语句执行之前获取了当前数据库的最新快照。快照中只记录了已提交的数据,因此不会出现脏读的异象。但由于每条语句执行前会获取新的快照,在同一个事务中连续的两条 SELECT 语句有可能看到不同的数据,即读已提交隔离级别下不能避免不可重复读和幻读的异常情况。

对于 UPDATE、DELETE、SELECT FOR UPDATE 等更新操作,它们在搜索目标行时的行为与 SELECT 相同,即只能找到在语句开始前已经提交的行版本,如果该版本不满足更新操作的谓词条件,则直接跳过该行,如果满足条件,才尝试更新该行。然而,当前事务(简称事务 A)在尝试更新一个满足谓词条件的目标行时,该行可能已经被另一个并发事务(简称事务 B)更新。在这种情况下,若事务 B 还没有结束,事务 A 需要等待事务 B 的提交或回滚。如果事务 B 回滚,事务 A 可以继续更新目标行;如果事务 B 提交,事务 A 将重新执行该语句,从而重新获取语句快照,以读到事务 B 更新后的版本,如果该版本依旧满足谓词条件,则在此基础上再进行更新。

可重复读或可串行化

在 OceanBase 数据库的可串行化(或可重复读)隔离级别下,事务的第一条语句会获取当前数据库的快照作为事务快照,后续 SELECT 语句都会基于事务快照读取数据,只能读到在事务快照之前所有已经提交事务的数据,而不会读到在事务执行过程中新提交或被并发事务修改的数据。由于每条语句使用同一个事务快照,所以事务内总能看到一致的数据,不会出现不可重复读和幻读的异常情况。

对于 UPDATE、DELETE、SELECT FOR UPDATE 等更新操作,它们在搜索目标行时的行为与 SELECT 相同,即只能找到在获取事务快照前已经提交的行版本,如果该版本不满足更新操作的谓词条件,则直接跳过该行,如果满足条件,才尝试更新该行。然而,当前事务(简称事务 A)在搜索到一个目标行时,该行可能已经被另一个并发事务(简称事务 B)更新。在这种情况下,若事务 B 还没有结束,事务 A 需要等待事务 B 的提交或回滚。如果事务 B 回滚,事务 A 可以继续更新最初找到的行;如果事务 B 提交,事务 A 不能基于旧的快照进行更新,否则会出现丢失更新(Lost Update)的情况,因此事务 A 只能进行回滚,此时 OceanBase 数据库会返回下列错误信息:

  • Oracle 模式:

    ORA-08177: can't serialize access for this transaction
    
  • MySQL 模式:

    ERROR 6235 (25000): can't serialize access for this transaction
    

业务层需要考虑到事务可能会因为写冲突而回滚,并准备事务重试逻辑。如果事务复杂,重试代价较大,且业务并不要求事务所有语句看到一致的数据情况,建议使用读已提交的隔离级别。

OceanBase 数据库可串行化隔离级别的限制

在 SQL 标准中,可串行化隔离级别只需要避免脏读、不可重复读和幻读的异常情况,但是可串行化的严格定义为:任何两个成功提交的并发事务按顺序执行,一个事务在另一个事务之后,即事务的并行执行结果需要和某种串行执行的结果相同。与 Oracle、PostgreSQL 9.0 及之前的版本类似,OceanBase 数据库的可串行化隔离级别下并不能保证严格的可串行化,即事务执行的结果可能不与任何串行执行模式的结果相同。其中写偏斜(Write Skew)是一个经典例子: 假设存在表 T1(num int) 和 T2(num int),两个表初始都没有数据。此时在事务 1(Trx1)和事务 2(Trx2)中按照以下顺序执行命令,

Trx1                                                  Trx2
BEGIN;
INSERT INTO T2 SELECT COUNT(*) FROM T1;

                                                      BEGIN;
                                                      INSERT INTO T1 SELECT COUNT(*) FROM T2;
COMMIT;
                                                      COMMIT:

由于 Trx1 和 Trx2 获取的快照中两个表的 COUNT 都为 0,最终表 T1 和表 T2 中都会插入 num=0 的一行,而假设事务 1 和事务 2 串行执行,无论是 Trx1->Trx2 还是 Trx2->Trx1,最终两个表应该会分别插入 num=0 和 num=1。OceanBase 数据库目前无法保证严格可串行化的原因在于其读操作不会上锁,读写不互斥,并且也没有在事务提交时检查读写冲突是否成环。在大部分现实应用场景下,只要不出现脏读、幻读和不可重复读就能够满足业务的需求,如果业务一定需要严格的可串行化,可以显式地为读操作加锁,如 SELECT FOR UPDATE。

注意

串行化隔离级别下,开启事务后,会保留事务快照,事务提交后快照才会回收。因此,串行化隔离级别下,需要注意及时提交事务,否则可能遇到磁盘占用变大或者读取越来越慢的问题。

OceanBase 数据库隔离级别与其他数据库对比

数据库 读未提交(Read Uncommitted) 读已提交(Read Committed) 可重复读(Repeatable Read) 可串行化(Serializable)
OceanBase 仅支持语法 支持,与 SQL 标准一致 支持,且不存在幻读 支持,但不保证严格可串行化
Oracle 不支持语法 支持,与 SQL 标准一致 不支持语法 支持,但不保证严格可串行化
MySQL 支持,有可能读到脏数据 支持,与 SQL 标准一致 支持,且不存在幻读 支持,可以保证严格可串行化
PostgreSQL 9.1 之前版本 支持语法,但实际是 Read Committed 支持,与 SQL 标准一致 支持,且不存在幻读 支持,但不保证严格可串行化
PostgreSQL 9.1 及之后版本 支持语法,但实际是 Read Committed 支持,与 SQL 标准一致 支持,且不存在幻读 支持,可以保证严格可串行化

本文目录

概述隔离级别种类OceanBase 数据库隔离级别读已提交可重复读或可串行化OceanBase 数据库可串行化隔离级别的限制OceanBase 数据库隔离级别与其他数据库对比
有帮助
无帮助
反馈
AI