1. ACIDの特性トランザクション処理は、バッチで実行する必要がある MySQL 操作の管理メカニズムです。トランザクション中に、操作のバッチ全体が正しく実行されない限り、途中の操作が失敗すると、システム データに誤った変更が加えられないように、元の安全な状態に MySQL 5.5 以降、デフォルトのストレージ エンジンが MyLSAM から InnoDB に置き換えられました。その重要な理由の 1 つは、InnoDB がトランザクションをサポートしていることです。SHOW トランザクションの最も重要な 4 つのプロパティは、 トランザクション制御構文MySQL トランザクション制御には、トランザクションの開始、コミット、ロールバック、保存ポイントなど、いくつかの重要なノードがあります。 トランザクションを開始するということは、トランザクションの実行が開始されることを意味し、ステートメントは たとえば、A が B に 100 元を送金する場合: // 通常どおり実行して送信します BEGIN; # トランザクションを開始します UPDATE account_balance SET balance = balance - 100.00 WHERE account_name = 'A'; account_balance を更新し、balance = balance + 100.00 に設定します。WHERE account_name = 'B'; COMMIT; # トランザクションをコミット // 例外が発生したのでロールバック BEGIN; # トランザクションを開始 UPDATE account_balance SET balance = balance - 100.00 WHERE account_name = 'A'; account_balance を更新し、balance = balance + 100.00 に設定します。WHERE account_name = 'B'; ROLLBACK; # トランザクションのロールバック 複雑なシナリオでは、操作全体をロールバックする必要はなく、バッチで実行して特定のノードにロールバックする必要がある場合もあります。これは、大規模なトランザクションの下に複数のサブトランザクションをネストすることと同じです。MySQL では、 始める; user_tbl(id)値に挿入する(1); user_tbl(id)値に挿入する(2) ROLLBACK; # 1,2 BEGIN を記述しないでください。 user_tbl(id)値に挿入する(1); セーブポイント s1; user_tbl(id)値に挿入する(2) ROLLBACK TO s1; # 保持ポイント s1 にロールバックし、1 が正常に書き込まれ、2 がロールバックされ、最終結果は 1 になります。 RELEASE SAVEPOINT s1; # セーブポイントを解放する ちなみに、トランザクションには、暗黙的トランザクション (自動的にコミットされる) と明示的トランザクション (手動でコミットする必要がある) の 2 種類があります。MySQL では、暗黙的トランザクションがデフォルトになっています。暗黙的トランザクションは自動的にコミットされ、 # 変数を表示する SHOW VARIABLES LIKE 'autocommit'; +---------------+-------+ | 変数名 | 値 | +---------------+-------+ | 自動コミット | オン | +---------------+-------+ # 自動コミットを有効にする(デフォルト) 自動コミットを 1 に設定します。 # 自動コミットをオフにする SET autocommit = 0; 自動コミット状態では、トランザクションが明示的に開かれていない場合、各 DML ステートメントはトランザクションであり、システムは各 SQL ステートメントに対してコミット操作を自動的に実行します。 BEGIN または START TRANSACTION を使用してトランザクションを開始した後、COMMIT または ROLLBACK を使用してトランザクションを終了するまで自動コミットは無効のままになり、終了した時点で自動コミット モードは以前の状態に復元されます。 # 変数を表示する SHOW VARIABLES LIKE 'completion_type'; +-----------------+----------+ | 変数名 | 値 | +-----------------+----------+ | 完了タイプ | NO_CHAIN | +-----------------+----------+ completion_type = 0: デフォルト値。コミットが実行された後、新しいトランザクションは自動的に開始されません。 3. トランザクション同時実行例外実際の生産ライン環境では、大規模な同時リクエストが発生する場合があります。トランザクション分離レベルが適切に設定されていない場合、いくつかの異常な状況が発生する可能性があります。最も一般的な異常は 1. ダーティリードダーティ リードとは、次のように、トランザクションが別のトランザクションのコミットされていないデータにアクセスすることを意味します。
2. 繰り返し不可能な読み取り反復不可能な読み取りとは、同じデータを複数回読み取るトランザクション中にデータ値の内容が変化し、同じ値を読み取ることができなくなる状況を指します。次のプロセスに示すように、同じデータが更新/削除される現象を表します。
3. ファントムリーディングファントム リードとは、トランザクション中に同じデータを複数回読み取る際に、データ項目の数が変化するという、錯覚が起こったような状況を指します。次のプロセスに示すように、テーブル全体に対する挿入/削除の現象を指します。
4. トランザクション分離レベルシリアル化されたトランザクション処理は、もちろん最も安全な方法ですが、シリアル化ではデータベースへの高同時アクセスのニーズを満たすことができません。妥協案として、トランザクションの同時性と引き換えにデータベースの分離基準を下げる必要があり、効率性の向上と引き換えに制御可能な範囲内での正確性を犠牲にすることがあります。このトレードオフは、トランザクションの分離レベルによって実現されます。 データベースには、低から高の順に、 (1)コミットされていない読み取り 上記3つの異常事態に対する4つの隔離レベルにおける許容範囲は以下のとおりです( 分離レベルを表示するコマンドは次のとおりです。 'transaction_isolation' のような変数を表示します。 # または SELECT @@global.tx_isolation, @@tx_isolation; 2 番目の方法は、グローバルおよび現在のセッション分離レベルを表示することです。 分離レベルを設定するコマンドは次のとおりです。 # 現在のセッションの分離レベルをコミットされていない読み取りに設定します SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; # グローバル分離レベルをコミットされていない読み取りに設定します SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; MySQL トランザクションの詳細な説明については、これで終わりです。MySQL に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Nginx サービスを使用してサブドメイン環境を構築し、2D マップの読み込みパフォーマンスを向上させる方法を説明します。
>>: デザインにおけるユーザーエクスペリエンスの背後にある8つのユーザー本能について話す
HTMLテキスト書式タグ 標簽 描述 <b> 定義粗體文本 <em> 呈現...
HTML img タグ: Web ページに導入される画像を定義します。興味深い usemap 属性も...
参考までに、win7システム上のVMware仮想マシンにlinux7.2インターネットアクセス構成を...
<canvas> 要素は、クライアント側のベクター グラフィックス用に設計されています。...
IE8には複数の互換モードがあります。 IE プラットフォームの設計者である Chris Wilso...
この記事では、VMware Workstation 14 Proのインストールとアクティベーションに...
みなさんこんにちは、今日はウェブフロントエンドのHTMLを見ていたら、inputタグのtype属性が...
序文innodb_data_file_path は、innodb テーブルスペース ファイルを指定す...
nginx リバース プロキシを設定する場合、location と proxy_pass のスラッシ...
目次1: galera-clusterの紹介2. galera-clusterの仕組み3: Mari...
目次環境仮想マシンバージョンMySQL バージョン事前準備MySQLの実行ステータスを確認するルート...
目次リアクトフック序文なぜフックなのか?クラス関数クラスとフックの比較フックはコンポーネントの状態を...
目次1. 自己増分値はどこに保存されますか? 2. 自己価値修正メカニズム3. 自動増分値を変更する...
MySQL チューニング ツールの詳細な説明と実践的な演習の説明 ツールの紹介の説明 分析例の説明...
序文最近、MySQL のインデックスについて読んでいました。結合されたインデックスを見ると、左端の原...