OceanBase系统架构MySQL事务控制

2024年 1月 27日 38.4k 0

开启事务

OceanBase 数据库的事务控制语句与 MySQL 数据库兼容,开启事务可以通过以下方式来完成:

  • 执行 START TRANSACTION 命令

  • 执行 BEGIN 命令

  • 执行 SET autocommit = 0 之后再执行的第一条语句

语法如下:

START TRANSACTION
[transaction_characteristic [, transaction_characteristic] ...]

transaction_characteristic: {
WITH CONSISTENT SNAPSHOT
| READ WRITE
| READ ONLY
}

BEGIN [WORK]

SET autocommit = {0 | 1}

提交事务

提交事务通过 COMMIT 命令来完成,具体语法如下所示:

COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]

此外,如果 autocommit = 0,那么执行一条开启事务的语句也会隐式地提交当前进行中的事务。

回滚事务

回滚事务通过 ROLLBACK 命令来完成。

回滚事务的 SQL 语法如下:

ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]

自动提交

自动提交是指当 autocommit 这个 Session 变量的值为 1 时,此时每条语句执行结束后,OceanBase 数据库将会自动的把这条所在的事务提交。这样一来,一条语句就是一个事务。

隐式提交

隐式提交是用户未发出 COMMIT/ROLLBACK 等结束事务的语句给 OceanBase 数据库,而 OceanBase 数据库自动将当前活跃的事务执行 COMMIT 提交的过程。

隐式提交发生在以下情形:

  • 执行一个开启事务的语句

  • 执行 DDL

自动回滚

自动回滚是用户未发出 ROLLBACK 指令,而是 OceanBase 数据库内部发起的回滚,通常发生在以下情形:

  • session 断开

  • 事务执行超时(ob_tx_timeout)

  • 活跃事务的 session 超过一定时长没有语句执行(ob_tx_idle_timeout)

说明

  • ob_tx_timeout 用于设置事务超时时间,单位为微秒。

  • ob_tx_idle_timeout 用于设置事务空闲超时时间,即事务中两条语句之间的执行间隔超过该值时超时,单位为微秒。

有关变量的详细介绍,参见 《OceanBase 数据库参考指南》中 系统变量 章节。

这些情况下,事务自动被 OceanBase 数据库回滚,如果用户再次在当前 session(未断开)上执行 SQL 则会提示事务已经中断(无法继续)需要回滚,此时用户需要执行 ROLLBACK 来结束当前事务。

事务被中断

当事务执行过程中发生内部错误,如参与者节点宕机或者其它导致事务无法继续时,此时当前事务无法继续成功地执行语句,只能回滚。

此种情况发生时,用户执行 SQL 语句将会收到"transaction need rollback"的错误,用户需要执行 ROLLBACK 来结束当前事务。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论