取引の基本的な流れ:
オープントランザクション:トランザクションを開始。
保存という名前のセーブポイント:セーブポイントを作成します
バック(状況に応じて)ポイントを保存するには:ロールバックをロールコールを保存します
MySQLの特定のプレゼンテーションの場合:
MySQLの>スタートトランザクション ; - オープンサービス クエリOK、0影響を受ける行(0.00 秒) のMySQL >セーブポイントのAAこと; - セーブポイントAA設定 、クエリにOKを0影響を受ける行(0.00 秒) のMySQL > INSERT INTOアカウント値(1。 、" 張"、10); - レコードの追加 、クエリOKを1つの。行が影響を受けた(0.00 秒) のMySQL >BBそのセーブポイント; - セーブポイントBBセット クエリOK、0行が影響を受けた(0.00 秒) のMySQL > INSERT INTOアカウント値(2、' ジョン・ドウ'、10000); - レコードの追加 、クエリにOKを1行影響を受けた(0.00 秒) のMySQL > SELECT * から口座; - 2つのレコードを + - - + -------- + ---------- + |上記ID |名前|バランス| + - - + -------- + ---------- + | 1 |ジョー・スミス| 10.00 | | 2 |ジョン・ドウ| 10000.00 | + - - + - + ---------- + ------- 2行における SET(0.00 秒) のMySQL > ROLLBACK に BB; - レコードが後誤用を添加することを見出しました。このため、ロールバック状態BB OKクエリ0影響を受ける行(0.01 秒) MySQLを> SELECT * からアカウント; - 第二記録なし + - - + -------- + --------- + |上記ID |名前|バランス| + - - + -------- + --- + ------ | 1 |ジョー・スミス| 10.00 | + - - + -------- + --------- + 1行で SET(0.03秒)
注意事項実際の操作:
1は、トランザクション・セーブポイントあれば、また(トランザクションが提出されていないことを提供する)直接使用のロールバック、専用トランザクションをロールバックを開始するために、ロールバックすることができます
2、トランザクションが(コミット)、それはロールバックすることはできません(ロールバック)に提出された場合
図3に示すように、意図的にそのストレージノードのフォールバックを選択
4、InnoDBはトランザクションをサポートし、MyISAMテーブルは、トランザクションをサポートしていません。
5、開始トランザクションのトランザクションで始まります
トランザクション分離レベル:
我々は、複数のクライアントがデータベースの特定のテーブル上で動作しているときに、どのように操作を隔離するには?MySQLはアイソレーションのレベルを提供します
これが発生すると、MySQLは操作におけるデータの整合性を保証するために、分離して、異なる取引データを可能にする機構を提供します
さんが呼ばれているものを見てみましょう「ダーティリード。」
「ダーティ読み取りは、」トランザクションがデータにアクセスしているときを意味し、そしてデータは、その後、別のトランザクションでもこのデータにアクセスし、このデータを使用して、この変更がまだデータベースにコミットしていない変更されました
例えば:
- 1000年の1.Mary元賃金、財務担当者は、メアリー8000の代わりを支払うことになります(ただし、トランザクションを提出しませんでした)
- 2.Maryは、彼らは喜びに満ち、8000に彼らの賃金を見つけ、彼らの賃金を読んでください!
- 3.金融トランザクションがロールバックされ、間違いを発見し、このように1000年にメアリーの賃金は、メアリーの賃金は番号8000が汚れている覚えています
バージョン追加
ロックフリー楽観的ロックを、クライアントAがその設定後に変更V2、V1を読んで、クライアントBはv2は、v1は(あなたはそれがV2であったであろう変更したいので、クライアントBである)前と同じではありません読み区別するために
のみ、それは元のバージョンよりも大規模なアップデートを発見された限り、衰えることなく増加し、我々は慎重に検討する必要があります
トランザクションのACID特性
アトミック(原子性):
同じ特性は、トランザクション・アプリケーションが細分化されていない最小の論理的な実行体を分割することができないした、最小の粒子の原子の性質であるように、アプリケーショントランザクションは、実行の最小単位です。
一貫性(一貫性):
トランザクションの実行結果は、それは、ある一貫した状態からデータベースを作る別の一貫した状態に変更する必要があります。データベースが正常にコミットされたトランザクションの結果のみが含まれている場合、データベースは一貫性のある状態になっています。システムは、割り込みが発生した実行されている場合は、トランザクションが完了していない間、中断が、データベースに対して行われたデータベースの変更に書き込まれた不完全なトランザクションを変更した後、データベースが正しくない(矛盾)状態になります。一貫性は、それゆえ、原子によって確保されています。
絶縁(アイソレーション):
各個々のトランザクションを乱すことなく実行は、他の同時トランザクションのすべての内部操作のトランザクションが単離されます。言い換えれば、同時に実行するトランザクションの間の中間状態の他の側面を見ることができない、互いに同時に実行トランザクションに影響を与えることができません。
永続性(耐久性):
持続性は、トランザクションがコミットされると、それは永久に(:ディスクなど)、その中に格納されるデータベースレコードへの変更を意味します。