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つのテーブルタイプをサポートするかどうかは、インストールによって異なります。