Mysql-transactions

提供:Dev Guides
移動先:案内検索

MySQL-トランザクション

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

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

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

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

  • *アトミック性-これにより、ワークユニット内のすべての操作が正常に完了します。そうでない場合、トランザクションは失敗した時点で中止され、以前の操作は以前の状態にロールバックされます。
  • 一貫性-これにより、データベースが正常にコミットされたトランザクションの状態を適切に変更します。
  • 分離-これにより、トランザクションが互いに独立して透過的に動作できるようになります。
  • 耐久性-これにより、システム障害が発生した場合でも、コミットされたトランザクションの結果または効果が持続します。

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

コミットとロールバック

これらの2つのキーワード Commit および Rollback は、主にMySQLトランザクションに使用されます。

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

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

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

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

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

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

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

  • mysql_query()*関数を使用して、PHPでこれらのSQLコマンドを実行できます。
  • SQLコマンド BEGIN WORK を発行して、トランザクションを開始します。
  • SELECT、INSERT、UPDATE、DELETEなどの1つ以上のSQLコマンドを発行します。
  • エラーがなく、すべてが要件に従っているかどうかを確認します。
  • エラーがある場合はROLLBACKコマンドを発行し、そうでない場合はCOMMITコマンドを発行します。

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

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

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

MySQLインストールがInnoDBテーブルをサポートしている場合、 TYPE = InnoDB 定義をテーブル作成ステートメントに追加するだけです。

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

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の詳細については、次のリンクをクリックしてください-http://www.mysql.com/doc/I/n/InnoDBl [InnoDB]

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