START TRANSACTION
此语句在 TiDB 中启动一个新的事务。它类似于 BEGIN 语句。
在没有使用 START TRANSACTION 语句的情况下,每个语句默认会在自己的事务中自动提交。这一行为确保了与 MySQL 的兼容性。
概要
BeginTransactionStmt:
- BeginTransactionStmt
- AsOfClause
BeginTransactionStmt ::=
'BEGIN' ( 'PESSIMISTIC' | 'OPTIMISTIC' )?
| 'START' 'TRANSACTION' ( 'READ' ( 'WRITE' | 'ONLY' ( ( 'WITH' 'TIMESTAMP' 'BOUND' TimestampBound )? | AsOfClause ) ) | 'WITH' 'CONSISTENT' 'SNAPSHOT' | 'WITH' 'CAUSAL' 'CONSISTENCY' 'ONLY' )?
AsOfClause ::=
( 'AS' 'OF' 'TIMESTAMP' Expression)
示例
mysql> CREATE TABLE t1 (a int NOT NULL PRIMARY KEY);
Query OK, 0 rows affected (0.12 sec)
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO t1 VALUES (1);
Query OK, 1 row affected (0.00 sec)
mysql> COMMIT;
Query OK, 0 rows affected (0.01 sec)
MySQL 兼容性
START TRANSACTION立即在 TiDB 中启动一个事务。这与 MySQL 不同,MySQL 中的START TRANSACTION是惰性创建事务的。但在 TiDB 中,START TRANSACTION等同于 MySQL 的START TRANSACTION WITH CONSISTENT SNAPSHOT。语句
START TRANSACTION READ ONLY被解析以实现与 MySQL 的兼容,但仍然允许写操作。