START TRANSACTION语句
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
在标准 SQL 中,可以发出 START TRANSACTION
语句以将非事务会话状态切换为事务状态。 该标准规定,如果会话已在事务中,则应引发错误。实现通常有不同的看法,包括
- 遵循 SQL 标准。
- 如果事务存在,则忽略该语句。
- 仅在顶层支持该语句,而不在
过程上下文
中支持。 - 完全不支持该语句,始终隐式启动事务。
jOOQ 尝试以一种安全的方式标准化此行为,即使在不支持该语句的情况下始终启动事务也是安全的,在这种情况下会生成一个空操作。
根据是否支持此语句,方言可能会将 COMMIT 和 ROLLBACK 视为有效结束事务的语句,此后只有在另一个显式的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
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!