mysql トランザクション処理
すべてのエンジンがトランザクション処理をサポートしているわけではありません 第 21 章で述べたように、MySQL はいくつかの基本的なデータベース エンジンをサポートしています。この章で説明したように、すべてのエンジンが明示的なトランザクション管理をサポートしているわけではありません。 MyISAM と InnoDB は、最も一般的に使用される 2 つのエンジンです。前者は明示的なトランザクション管理をサポートしていませんが、後者は明示的なトランザクション管理をサポートしています。このため、本書で使用されているサンプル テーブルは、より一般的に使用されている MyISAM ではなく InnoDB を使用するように作成されています。アプリケーションにトランザクション処理機能が必要な場合は、必ず正しいエンジン タイプを使用してください。
トランザクション処理は、データベースの整合性を維持するために使用でき、MySQL 操作のバッチが完全に実行されるか、まったく実行されないかを保証します。
リレーショナル データベース設計では、データを複数のテーブルに保存することで、データの操作、保守、再利用が容易になります。リレーショナル データベースの設計方法と理由については説明しませんが、適切に設計されたデータベース スキーマはすべて、ある程度リレーショナルです。
前に使用した注文テーブルが良い例です。注文は、orders と orderitem の 2 つのテーブルに保存されます。orders は実際の注文を保存し、orderitems は注文された商品を保存します。 2 つのテーブルは、主キーと呼ばれる一意の ID を使用して相互に関連付けられます。これら 2 つのテーブルは、顧客情報と製品情報を含む他のテーブルに関連付けられています。
システムに注文を追加するプロセスは次のとおりです:
(1) 対応する顧客がデータベースに存在するかどうかを確認し(顧客テーブルからのクエリ)、存在しない場合はその顧客を追加します。
(2) 顧客のIDを取得します。
(3) 注文テーブルに行を追加し、顧客 ID に関連付けます。
(4) 注文テーブルに割り当てられた新しい注文 ID を取得します。
(5) 注文された商品ごとに orderitems テーブルに行を追加し、
から ID を取得して orderitems テーブルに関連付けます (そして、製品 ID によって products テーブルに関連付けます)。
ここで、ある種のデータベース障害 (ディスク容量の超過、セキュリティ制限、テーブルのロックなど) により、このプロセスが完了できないと仮定します。データベース内のデータはどうなりますか?
顧客の追加後、注文テーブルの追加前に障害が発生した場合は、問題はありません。一部の顧客が注文を受けないことは完全に合法です。プロセスが再実行されると、挿入された顧客レコードが取得されて使用されます。問題が発生したところからプロセスを効果的に開始できます。
しかし、orders 行が追加された後、orderitems 行が追加される前にエラーが発生した場合はどうなるでしょうか?現在、データベースには空の注文があります。
orderitems 行を追加している途中でシステムが失敗した場合は、さらに悪いことに。その結果、データベースには不完全な注文が存在しますが、ユーザーはそれを知りません。
この問題を解決するにはどうすればよいですか?ここではトランザクション処理を使用する必要があります。トランザクション処理は、データベースに不完全な操作結果が含まれないようにするためにバッチで実行する必要がある MySQL 操作を管理するために使用されるメカニズムです。トランザクションを使用すると、一連の操作が途中で停止されず、(明示的に指示されない限り) 全体として実行されるか、まったく実行されないことを保証できます。エラーが発生しない場合、ステートメントのセット全体がデータベース テーブルにコミット (書き込み) されます。エラーが発生した場合は、ロールバック (元に戻す) してデータベースを既知の安全な状態に復元します。同じ例を見て、今回はプロセスがどのように機能するかを説明します。
(1) 該当する顧客がデータベースに存在するか確認し、存在しない場合は追加します。
(2) 顧客情報を送信します。
(3) 顧客のIDを取得します。
(4) 注文テーブルに行を追加します。
(5) 注文テーブルへの行の追加中に障害が発生した場合はフォールバックします。
(6) 注文テーブルに割り当てられた新しい注文 ID を取得します。
(7) 注文された商品ごとに、orderitems テーブルに新しい行を追加します。
(8) orderitems への新しい行の追加中に障害が発生した場合は、追加されたすべての orderitems 行と orders 行をロールバックします。
(9) 注文情報を送信します。
トランザクションおよびトランザクション処理を使用する場合、繰り返し現れるキーワードがいくつかあります。
トランザクション処理について知っておくべきいくつかの用語があります:1. トランザクションは、一連の SQL ステートメントを指します。
2. ロールバック (ロールバック) は、指定された SQL ステートメントを元に戻すプロセスを指します。送信 (コミット) は、保存されていない SQL ステートメントの結果をデータベース テーブルに書き込むことを指します。 セーブポイント (セーブポイント) は、トランザクション処理で設定された一時的なプレースホルダー (プレースホルダー) を指します。トランザクション全体が異なります)。
【関連する推奨事項】
1.
mysql無料ビデオチュートリアル2.
MySQL UPDATEトリガー(更新)とトリガーの詳細な分析MySQL削除トリガー(削除)の使い方の詳細な説明MySQLの挿入トリガー(insert)の詳しい説明5. mysqlトリガーの紹介とトリガーの作成・削除方法
以上がMySQLトランザクション処理例の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。