専念

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

も参照してください

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