BEGIN
此语句在 TiDB 中启动一个新的事务。它类似于 START TRANSACTION
和 SET autocommit=0
语句。
在没有使用 BEGIN
语句的情况下,默认情况下每个语句都会在自己的事务中自动提交。这一行为确保了与 MySQL 的兼容性。
概要
- BeginTransactionStmt
BeginTransactionStmt ::=
'BEGIN' ( 'PESSIMISTIC' | 'OPTIMISTIC' )?
| 'START' 'TRANSACTION' ( 'READ' ( 'WRITE' | 'ONLY' ( 'WITH' 'TIMESTAMP' 'BOUND' TimestampBound )? ) | 'WITH' 'CONSISTENT' 'SNAPSHOT' )?
示例
mysql> CREATE TABLE t1 (a int NOT NULL PRIMARY KEY);
Query OK, 0 rows affected (0.12 sec)
mysql> BEGIN;
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 兼容性
TiDB 支持 BEGIN PESSIMISTIC
或 BEGIN OPTIMISTIC
的语法扩展。这使你可以覆盖默认的事务模型。