トランザクション管理第26章の研究ノート - になりますMySQLの知っている必要があります

この章では、トランザクションを管理するためにコミットとロールバックのステートメントを使用する方法、どのような取引を説明しています。

図1は、トランザクションは何である
ではないすべてのエンジンがトランザクションをサポートしています。
MyISAMテーブルとInnoDBエンジンは、最も一般的に使用される2つです。
MyISAMテーブルには、トランザクション管理をサポートしていません。
InnoDBはトランザクション管理をサポートしています。
アプリケーションのニーズ場合は、トランザクション処理、エンジンの正しい種類を使用してください。
トランザクション処理は、MySQLの操作の大部分は、完全に実行するか、まったく実行されないことを保証し、データベースの整合性を維持するために使用されます。
リレーショナルデータベースは、メンテナンスや再利用を操作するデータが容易になり、複数のテーブルにデータを格納するために設計されています。ように、適切に設計されたデータベーススキーマが関連付けられています。
テーブルを使用して受注までの章では良い例です。注文が実際の注文を格納するために、及びのOrderItemsストアは、様々なアイテムを注文:受注と受注のORDERITEMS 2つのテーブルに格納されています。ユニークなIDを使用して2つのテーブルが相互に関連し、主キーと呼ばれます。二つのテーブルおよび関連する顧客や製品情報を含む他のテーブル。
次のようにシステムにオーダーを追加します。
対応する顧客(顧客テーブルからクエリ)がある場合、ない場合は、データベースをチェック①クライアントを追加します。
顧客のIDを取得②。
③顧客IDに関連付け、注文テーブルに行を追加します。
④受注テーブルが新しい注文IDを与える取得します。
各順序付けられたアイテムに関連付けられた検索されたID注文テーブルによりテーブルのOrderItemsに行を追加⑤。
いくつかのデータベース障害のため、このプロセスの完了を防ぐ(例えば、ディスク・スペース、セキュリティ制限、テーブルロック、などのうちのような)さて、もし、データベース内のデータは、何が起こるかになりますか?
障害が受注テーブルを追加する前に、クライアントを追加した後に発生した場合は、何の問題もないでしょう。一部のお客様には、注文が完全に合法ではありませんでした。この再実行処理では、挿入された顧客レコードが検索され、使用されるであろう。効果的に失敗したところから、この手順を開始することができます。
障害がのOrderItems行を追加する前に、受注の行を追加した後に発生した場合でも、どのようにそれを行うには?さて、順番に空のデータベースがあります。
OrderItems行を追加することで悪化システム障害は、結果は不完全な受注がデータベースに存在している、とあなたは知りません。
どのようにこの問題を解決するには?これは、トランザクションを使用する必要があります。トランザクション処理は、管理するのに使用されるメカニズムである必須のMySQLのバッチ処理が行われ、データベースが完全営業成績が含まれていないことを確実にするために、。
トランザクション処理の使用、操作のセットを保証することができますが、彼らは、途中で停止していないか、行っ全部、またはではないとして実行しますエラーが発生していない場合は、ステートメントのグループ全体が(書かれた)データベーステーブルに提出しました。エラーが発生した場合、ロールバック(元に戻す)が知られており、安全な状態にデータベースを復元します。
だから、同じ例を見て、この時間は、我々はそれがどのように動作するかのプロセスを説明します。
①顧客の対応するデータベースがあるかどうかをチェックし、そうでない場合は、顧客を追加します。
顧客情報を提出する②。
顧客のIDを取得する③。
受注テーブルに行を追加します④。
⑤あなたはordersテーブル、ロールバックに行を追加するときにエラーが発生した場合。
表に与えられた新しい注文IDの注文を取得⑥。
⑦テーブルのOrderItemsに新しい行を追加し、各項目ごとに命じました。
あなたは、障害のOrderItemsに新しい行を追加する場合は⑧、バックロールの任意のOrderItems行と行の注文が追加されました。
注文情報を提出⑨。
トランザクションとトランザクション処理を使用する場合は、いくつかのキーワードが繰り返し行われます。ここでは、トランザクションについて知る必要があるいくつかの用語は以下のとおりです。
①業務:SQL文のセット
②ロールバック:指定処理のSQL文取り消す
③提出は:SQL文の結果は、データベーステーブルに格納されていない
トランザクション処理:④保有ポイント設定の一時的なプレースホルダを、あなたは彼のバックオフで公開(およびバックトランザクション全体のプロセスは異なる)ことができます

2つのコントロールトランザクションは、
トランザクションの管理は、次の関与について議論します。それはバックをロールしてはならないときとき、論理ブロックグループとしてSQL文を分解して、データを指定します鍵管理トランザクションはロールバックされます。トランザクションが開始識別するために、次の文を使用しMySQLの:

start transaction

(1)ロールバック使用して
ロールバック(元に戻す)のMySQLステートメントにMySQLのロールバックコマンドを:

select * from ordertotals;
start transaction;
delete from ordertotals;
select * from ordertotals;
rollback;
select * from ordertotals;

コンテンツの例を開始するには、ordertotals表を表示しました。
まず、テーブルが空でないことを示すためにselect文を実行します。
次に、トランザクションを開始DELETE文でordertotalsのすべての行を削除します。別のSELECT文はordertotalsが実際に空を確認します。
そして、ロールバック文で開始トランザクションの後にすべての文をロールバックします。
最後に、テーブルが空でないことをselect文を示しています。
ロールバックトランザクション内でのみ使用すること(後に開始transactionコマンドの実装では)。
どのような文はロールバックすることができます:
INSERT、UPDATE、DELETEステートメントのトランザクション管理。
Selectステートメントは、(ロールバックselect文は意味がありません)にロールバックすることはできません。
ロールバック操作を作成したり、削除することはできません。
トランザクション処理ブロックを作成またはドロップ操作、あなたは回避を行う場合は、作成またはドロップが取り消さないで使用することができます。

(2)コミット使用して
一般的なステートメントはMySQLデータベーステーブルに対して向けと書かれた提出(書き込みまたは保存)を実行している動作は自動的です。これは、暗黙の提出
トランザクションブロックでは、暗黙的に実行されることはありません提出次のように、文をコミット使用する、特定の提出の場合:

start transaction;
delete from orderitems where order_num=20010;
delete from orders where order_num=20010;
commit;

この例では、注文が完全にシステムから20010を除去します。それは、ブロック取引の使用は注文が部分を削除されないことを保証するため、2つのデータベースのテーブルの注文とのOrderItemsを更新伴うため。
最後の文をコミットすることは間違っていない場合にのみ、変更内容を書くこと。
最初の削除機能は、第二に障害が発生したものの、削除が提出されない場合(実際には、それが自動的に取り消されます)。
暗黙のトランザクションが閉じ:コミットまたはロールバックのステートメントを実行すると、トランザクションは自動的にシャットダウンします
(3)予約されたスポット使用して
、簡単なロールバックをコミット文は、書面または取り消すことができるトランザクション全体のプロセスを
しかし、単純な取引のためにそうするように、より複雑なトランザクションがしなければならないことがあり、部分的にコミットまたはロールバック
例えば、上述した処理の順序を追加するトランザクションです。エラーが発生した場合、あなただけのリターンに必要なを追加することができ、顧客はオーダーラインの前のテーブルにフォールバックする必要はありません。
サポートするために、トランザクションの一部をロールバックされ、それが所定の位置にブロックを処理するトランザクション内のプレースホルダに置き換える必要があります。あなたが、フォールバックが必要な場合は、プレースホルダにフォールバックすることができます。リテンション・ポイントと呼ばれるこれらのプレースホルダ。プレースホルダを作成するには、セーブポイントのステートメントを使用します。

savepoint delete1;

ご予約は後退返すためにどこロールバックは、知っているMySQLのときにということ、それは名前だけだすべてのポイントを識別するために取られています。次のように与えられた本実施形態の保持点にフォールバックするために、行うことができます。

rollback to delete1;

より良い保持ポイント。あなたは、より良い、MySQLのコード内で保持・ポイントの任意の数を設定することができます自分の願いがロールバックに複数の予約のポイントなので、あなたは柔軟に応じてすることができます。
リリース保持ポイント:トランザクションが完了した後に自動的に解放予約ポイント(ロールバックを実行またはコミット)。MySQL5ので、またリリースセーブポイントで明示リリースポイントを予約することができます。
(4)変更デフォルトでは、行動にコミット
すべての変更を提出し、自動的にされるのMySQLのデフォルトの動作を(任意の時点で、あなたは実際にはテーブルに対して実行されているMySQLの文を実行し、変更はすぐに有効になります)。MySQLは自動的に変更をコミットしていないことを示すには、次の文を使用する必要があります。

set autocommit=0;

自動コミット・フラグは自動的に、変更を送信するかどうかを決定してか、文をコミットせずに0の自動コミットを設定する(自動コミットがこれまでにtrueに設定されるまで)、MySQLは自動的に変更を送信しないことを示しています。
旗専用接続:自動コミット・フラグは、各接続ではなく、サーバー用です。

概要
この章では、トランザクションを記述するには、完全なSQLステートメントブロックが実行されなければならないです。私たちは時に明確な経営の取消し、データを書き込む際にコミットとロールバックステートメントを使用する方法を学びました。また、フォールバックの動作をより細かく制御を提供積立ポイントを使用する方法を学びました。

公開された90元の記事 ウォンの賞賛8 ビュー8221

おすすめ

転載: blog.csdn.net/weixin_43854189/article/details/104076772