専念

このステートメントは、TIDBサーバー内でトランザクションをコミットします。

BEGINまたはSTART TRANSACTIONステートメントがない場合、TiDB のデフォルトの動作では、すべてのステートメントが独自のトランザクションになり、自動コミットされます。この動作により、MySQL の互換性が確保されます。

あらすじ

CommitStmt
COMMITCompletionTypeWithinTransaction
CompletionTypeWithinTransaction
ANDCHAINNORELEASENOCHAINNORELEASENORELEASE

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 の互換性

  • 現在、TiDB は Metadata Locking (MDL) を使用して、DDL ステートメントがトランザクションで使用されるテーブルを変更できないようにしています。テーブルの定義が変更されている場合、トランザクションをコミットするとInformation schema is changedエラーになります。この場合、トランザクションは自動的にロールバックされます。
  • デフォルトでは、TiDB 3.0.8 以降のバージョンは悲観的ロックを使用します。 楽観的ロックを使用する場合、行が別のトランザクションによって変更されたためにCOMMITステートメントが失敗する可能性があることを考慮することが重要です。
  • 楽観的ロックが有効な場合、ステートメントがコミットされるまで、 UNIQUEつとPRIMARY KEYの制約チェックが延期されます。これにより、aa COMMITステートメントが失敗する可能性がある追加の状況が発生します。この動作はtidb_constraint_check_in_place=TRUEを設定することで変更できます。
  • TiDB は構文を解析しますが、構文ROLLBACK AND [NO] RELEASEを無視します。この機能は MySQL で使用され、トランザクションをコミットした直後にクライアント セッションを切断します。 TiDB では、代わりにクライアント ドライバーのmysql_close()の機能を使用することをお勧めします。
  • TiDB は構文を解析しますが、構文ROLLBACK AND [NO] CHAINを無視します。この機能は MySQL で使用され、現在のトランザクションがコミットされている間に、同じ分離レベルで新しいトランザクションをすぐに開始します。 TiDB では、代わりに新しいトランザクションを開始することをお勧めします。

こちらもご覧ください

エコシステム
TiDB
TiKV
TiSpark
Chaos Mesh
© 2022 PingCAP. All Rights Reserved.