MySQLi-トランザクション
トランザクションは、データベース操作操作の順次グループであり、単一の作業単位であるかのように実行されます。つまり、グループ内の個々の操作が成功しない限り、トランザクションは完了しません。トランザクション内のいずれかの操作が失敗すると、トランザクション全体が失敗します。
実際には、多くのSQLクエリをグループにまとめ、トランザクションの一部としてそれらすべてを一緒に実行します。
トランザクションのプロパティ
トランザクションには次の4つの標準プロパティがあり、通常は頭字語ACID-と呼ばれます。
Atomicity−ワークユニット内のすべての操作が正常に完了することを保証します。それ以外の場合、トランザクションは失敗した時点で中止され、以前の操作は以前の状態にロールバックされます。
Consistency −トランザクションが正常にコミットされると、データベースの状態が適切に変更されるようにします。
Isolation −トランザクションが互いに独立して透過的に動作できるようにします。
Durability −システム障害が発生した場合でも、コミットされたトランザクションの結果または効果が持続することを保証します。
MySQLでは、トランザクションはステートメントBEGIN WORKで始まり、COMMITまたはROLLBACKステートメントで終わります。開始ステートメントと終了ステートメントの間のSQLiコマンドは、トランザクションの大部分を形成します。
コミットとロールバック
これらの2つのキーワード Commit そして Rollback 主にMySQLトランザクションに使用されます。
トランザクションが正常に完了したら、COMMITコマンドを発行して、関連するすべてのテーブルへの変更を有効にする必要があります。
障害が発生した場合は、ROLLBACKコマンドを発行して、トランザクションで参照されているすべてのテーブルを以前の状態に戻す必要があります。
と呼ばれるセッション変数を設定することにより、トランザクションの動作を制御できます。 AUTOCOMMIT。AUTOCOMMITが1(デフォルト)に設定されている場合、各SQLステートメント(トランザクション内かどうかに関係なく)は完全なトランザクションと見なされ、終了時にデフォルトでコミットされます。AUTOCOMMITが0に設定されている場合、SET AUTOCOMMIT = 0コマンドを発行すると、後続の一連のステートメントはトランザクションのように機能し、明示的なCOMMITステートメントが発行されるまでアクティビティはコミットされません。
これらのSQLコマンドは、次を使用してPHPで実行できます。 mysqli_query() 関数。
トランザクションの一般的な例
この一連のイベントは、使用されるプログラミング言語とは無関係です。論理パスは、アプリケーションの作成に使用する言語で作成できます。
これらのSQLコマンドは、次を使用してPHPで実行できます。 mysqli_query() 関数。
SQLコマンドを発行してトランザクションを開始します BEGIN WORK.
SELECT、INSERT、UPDATE、DELETEなどの1つ以上のSQLコマンドを発行します。
エラーがなく、すべてが要件に従っているかどうかを確認します。
エラーがある場合は、ROLLBACKコマンドを発行します。それ以外の場合は、COMMITコマンドを発行します。
MySQLiのトランザクションセーフなテーブルタイプ
トランザクションを直接使用することはできませんが、安全で保証されているわけではありません。MySQLiプログラミングでトランザクションを使用する場合は、特別な方法でテーブルを作成する必要があります。トランザクションをサポートするテーブルには多くの種類がありますが、最も人気のあるものはInnoDB。
InnoDBテーブルのサポートには、MySQLiをソースからコンパイルするときに特定のコンパイルパラメーターが必要です。MySQLiバージョンがInnoDBをサポートしていない場合は、インターネットサービスプロバイダーに、InnoDBテーブルタイプをサポートするMySQLiのバージョンを構築するか、WindowsまたはLinux / UNIX用のMySQL-Maxバイナリディストリビューションをダウンロードしてインストールし、でテーブルタイプを操作するように依頼してください。開発環境。
MySQLiインストールがInnoDBテーブルをサポートしている場合は、単に TYPE = InnoDBテーブル作成ステートメントの定義。たとえば、次のコードは、tutorials_innodbという名前のInnoDBテーブルを作成します。
root@host# mysql -u root -p;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tutorials_innodb
-> (
-> tutorial_author varchar(40) NOT NULL,
-> tutorial_count INT
-> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.02 sec)
− InnoDBの詳細については、次のリンクを確認してください
次のような他のテーブルタイプを使用できます GEMINI または BDB、ただし、これら2つのタイプをサポートするかどうかは、インストールによって異なります。