开启事务
开启方式
OceanBase 数据库在 Oracle 模式下开启事务共有以下两种方式:
自动开启
在无事务开启的 Session 端执行 DML 语句(除了
SELECT)、DCL 语句或 DDL 语句时,会默认开启一个事务。手动开启
除了兼容 Oracle 数据库的使用方式外,OceanBase 数据库还支持手动开启事务,语法如下:
START TRANSACTION [READ ONLY | READ WRITE]; BEGIN [WORK] ;
执行效果
事务开启后,系统会根据用户指定或默认设置对事务信息进行初始化:
设置用户信息。
设置隔离级别。
默认事务的隔离级别为
READ COMMITTED,您可以通过SET TRANSACTION等语句指定隔离级别。为
SERIALIZABLE级别的事务设置事务级快照版本。
提交事务
提交当前事务的语法如下:
obclient> COMMIT [WORK];
输入 COMMIT 语句后即进入事务提交流程,提交事务修改并结束事务。 在 OceanBase 数据库中,典型情况下提交事务需要执行"两阶段提交",两阶段提交详细说明请参见 二阶段提交。
回滚事务
回滚当前事务的语法如下:
ROLLBACK [WORK];
输入 ROLLBACK 语句后进入事务回滚流程,清除事务修改并结束事务。
具体流程如下:
各参与者清除 MemTable 上自己的修改并释放行锁,清理参与者上下文。
参与者清除成功后返回消息给调度者,调度者收集到所有参与者清理成功的消息后,清理调度者上下文。
只读事务
只读不开事务
为了针对只读语句进行优化,在 Session 无事务开启的情况下,执行 SELECT 语句即可进入只读不开事务路径。只读不开事务跳过事务上下文等流程,只读取所需的必要信息,将数据返回用户。
只读不开事务的快照时间获取方式由当前 Session 的隔离级别决定。
只读不开事务的示例如下:
SELECT * FROM t1;//只读不开事务
SELECT * FROM t2;//只读不开事务
INSERT INTO t1 VALUES(1);//开启事务
只读事务
输入如下语句,可开启只读事务。
obclient> START TRANSACTION READ ONLY;
只读事务不能存在对数据的修改,也因此相对读写事务可进行优化,只读事务不创建事务上下文,故在回滚时也无需执行任何清理操作。




