専念

このステートメントは、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 はメタデータ ロック (MDL) を使用して、デフォルトで DDL ステートメントがトランザクションで使用されるテーブルを変更するのを防ぎます。メタデータ ロックの動作は、TiDB と MySQL で異なります。詳細については、 メタデータロックを参照してください。
  • デフォルトでは、TiDB 3.0.8 以降のバージョンは悲観的ロックを使用します。 楽観的ロックを使用する場合は、行が別のトランザクションによって変更されているため、 COMMITステートメントが失敗する可能性があることを考慮することが重要です。
  • オプティミスティック ロックが有効な場合、 UNIQUEPRIMARY KEYの制約チェックはステートメントがコミットされるまで延期されます。これにより、aa COMMITステートメントが失敗する可能性がある追加の状況が発生します。この動作はtidb_constraint_check_in_place=ONを設定することで変更できます。
  • TiDB は構文を解析しますが無視しますROLLBACK AND [NO] RELEASE 。この機能は、トランザクションをコミットした直後にクライアント セッションを切断するために MySQL で使用されます。 TiDB では、代わりにクライアント ドライバーのmysql_close()機能を使用することをお勧めします。
  • TiDB は構文を解析しますが無視しますROLLBACK AND [NO] CHAIN 。この機能は MySQL で使用され、現在のトランザクションがコミットされている間に、同じ分離レベルで新しいトランザクションを即座に開始します。 TiDB では、代わりに新しいトランザクションを開始することをお勧めします。

こちらも参照

このページは役に立ちましたか?