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つのユーザー本能について話す
XHTML には多くのタグがありますが、頻繁に使用されるのはごくわずかであり、習得する必要があるのは...
1. openssh-serverをインストールする yum インストール -y openssl o...
この記事では、ドラッグアンドドロップをJSオブジェクト指向で実装するための具体的なコードを参考までに...
この記事では、jsでスライダーをドラッグする方法の具体的なコードを参考までに共有します。具体的な内容...
1. 効果を達成する 2 知識ポイント2.1 <label> タグHTML では、<...
1. Dockerのホスト間通信Docker クロスホスト ネットワーク ソリューションには以下が含...
オペレーティング システム: windows10_x64 Python バージョン: 3.6.8仮想...
目次序文指導の基本フック機能フック関数のパラメータ文章使い方とアイデア成し遂げる汎用性を高める要約す...
新しく作成された Web サイトの場合は、ASP.NET MVC5 を例に挙げます。セッションを処理...
シングルページアプリケーションを開発する場合、特定のルートを入力し、パラメータに基づいてサーバーから...
まずはレンダリングを見てみましょう: XML/HTML コードコンテンツをクリップボードにコピー&l...
必要:公式サイトのリソースサーバーは確かに1つのインスタンスでは使えず、複数のインスタンスを一緒に使...
目次1. 効果図(複数列) 2. 通常セレクター: mode = selector、複数列セレクター...
方法1: onclickイベントを使用する <input type="button&...
1. テーブルステートメントを作成します。 テーブル「従業員」を作成します( `emp_no` in...