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 的兼容,但仍然允许写操作。