可用版本: 开发版 (3.21) | 最新版 (3.20) | 3.19 | 3.18

START TRANSACTION语句

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

在标准 SQL 中,可以发出 START TRANSACTION 语句以将非事务会话状态切换为事务状态。 该标准规定,如果会话已在事务中,则应引发错误。实现通常有不同的看法,包括

  • 遵循 SQL 标准。
  • 如果事务存在,则忽略该语句。
  • 仅在顶层支持该语句,而不在 过程上下文 中支持。
  • 完全不支持该语句,始终隐式启动事务。

jOOQ 尝试以一种安全的方式标准化此行为,即使在不支持该语句的情况下始终启动事务也是安全的,在这种情况下会生成一个空操作。

根据是否支持此语句,方言可能会将 COMMITROLLBACK 视为有效结束事务的语句,此后只有在另一个显式的 START TRANSACTION 语句之后才能执行事务代码。 jOOQ 不标准化此行为,建议始终显式使用 START TRANSACTION

方言支持

此示例使用 jOOQ

startTransaction()

翻译成以下特定方言的表达式

Aurora Postgres, BigQuery, CockroachDB, MariaDB, MemSQL, MySQL, Postgres, YugabyteDB

START TRANSACTION

DB2

BEGIN
END

Exasol

COMMIT

Firebird

EXECUTE BLOCK AS
BEGIN
END

H2, SQLDataWarehouse, SQLServer, SQLite, Teradata

BEGIN TRANSACTION

Hana

DO BEGIN
END;

HSQLDB

START TRANSACTION READ WRITE

Informix

BEGIN WORK

Oracle

BEGIN
  NULL;
END;

ASE, Access, Aurora MySQL, ClickHouse, Databricks, Derby, DuckDB, Redshift, Snowflake, Sybase, Trino, Vertica

/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

反馈

您对此页面有任何反馈吗? 我们很乐意听取您的意见!

The jOOQ Logo