MySQL-トランザクション

トランザクションは、データベース操作操作の順次グループであり、単一の作業単位であるかのように実行されます。つまり、グループ内の個々の操作が成功しない限り、トランザクションは完了しません。トランザクション内のいずれかの操作が失敗すると、トランザクション全体が失敗します。

実際には、多くのSQLクエリをグループにまとめ、トランザクションの一部としてそれらすべてを一緒に実行します。

トランザクションのプロパティ

トランザクションには次の4つの標準プロパティがあり、通常は頭字語で呼ばれます。 ACID

  • Atomicity−これにより、ワークユニット内のすべての操作が正常に完了します。それ以外の場合、トランザクションは失敗した時点で中止され、以前の操作は以前の状態にロールバックされます。

  • Consistency −これにより、トランザクションが正常にコミットされたときにデータベースの状態が適切に変更されます。

  • Isolation −これにより、トランザクションは相互に独立して透過的に動作できます。

  • Durability −これにより、システム障害が発生した場合でも、コミットされたトランザクションの結果または効果が持続します。

MySQLでは、トランザクションはステートメントで始まります BEGIN WORK そして、いずれかで終わります COMMIT または ROLLBACKステートメント。開始ステートメントと終了ステートメントの間のSQLコマンドは、トランザクションの大部分を形成します。

コミットとロールバック

これらの2つのキーワード Commit そして Rollback 主にMySQLトランザクションに使用されます。

  • トランザクションが正常に完了したら、COMMITコマンドを発行して、関連するすべてのテーブルへの変更を有効にする必要があります。

  • 障害が発生した場合は、ROLLBACKコマンドを発行して、トランザクションで参照されているすべてのテーブルを以前の状態に戻す必要があります。

と呼ばれるセッション変数を設定することにより、トランザクションの動作を制御できます。 AUTOCOMMIT。AUTOCOMMITが1(デフォルト)に設定されている場合、各SQLステートメント(トランザクション内かどうかに関係なく)は完全なトランザクションと見なされ、終了時にデフォルトでコミットされます。

AUTOCOMMITが0に設定されている場合、 SET AUTOCOMMIT = 0 コマンドを実行すると、後続の一連のステートメントはトランザクションのように機能し、明示的なCOMMITステートメントが発行されるまでアクティビティはコミットされません。

これらのSQLコマンドは、PHPで次のコマンドを使用して実行できます。 mysql_query() 関数。

トランザクションの一般的な例

この一連のイベントは、使用されるプログラミング言語とは無関係です。論理パスは、アプリケーションの作成に使用する言語で作成できます。

これらのSQLコマンドは、PHPで次のコマンドを使用して実行できます。 mysql_query() 関数。

  • SQLコマンドを発行してトランザクションを開始します BEGIN WORK

  • SELECT、INSERT、UPDATE、DELETEなどの1つ以上のSQLコマンドを発行します。

  • エラーがなく、すべてが要件に従っているかどうかを確認します。

  • エラーがある場合は、ROLLBACKコマンドを発行します。それ以外の場合は、COMMITコマンドを発行します。

MySQLのトランザクションセーフなテーブルタイプ

トランザクションを直接使用することはできませんが、特定の例外については使用できます。ただし、それらは安全で保証されていません。MySQLプログラミングでトランザクションを使用する場合は、特別な方法でテーブルを作成する必要があります。トランザクションをサポートするテーブルには多くの種類がありますが、最も人気のあるものはInnoDB

InnoDBテーブルのサポートには、ソースからMySQLをコンパイルするときに特定のコンパイルパラメーターが必要です。MySQLバージョンがInnoDBをサポートしていない場合は、インターネットサービスプロバイダーに、InnoDBテーブルタイプをサポートするMySQLのバージョンを構築するか、ダウンロードしてインストールするように依頼してください。MySQL-Max Binary Distribution WindowsまたはLinux / UNIXの場合、開発環境でテーブルタイプを操作します。

MySQLインストールがInnoDBテーブルをサポートしている場合は、 TYPE = InnoDB テーブル作成ステートメントの定義。

たとえば、次のコードは、というInnoDBテーブルを作成します。 tcount_tbl

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tcount_tbl
   -> (
   -> tutorial_author varchar(40) NOT NULL,
   -> tutorial_count  INT
   -> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.05 sec)

InnoDBの詳細については、次のリンクをクリックしてください-InnoDB

次のような他のテーブルタイプを使用できます GEMINI または BDB、ただし、これら2つのテーブルタイプをサポートするかどうかは、インストールによって異なります。