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つのユーザー本能について話す
1. psshを確認してインストールします。yum list pssh 2. キーレスログインが設定...
MySQL 5.7.8 では json フィールドが導入されました。このタイプのフィールドは使用頻度...
文字列関数文字ascii(str)のASCIIコード値をチェックし、strが空の文字列の場合は0を返...
導入インストールするシステムの数が多い場合、USB フラッシュ ドライブまたは CD を使用した手動...
Supervisor は非常に優れたデーモン管理ツールです。自動起動、ログ出力、自動ログカットなど、...
序文ますます便利になった今日のインターネット社会では、さまざまなインターネット ランサムウェア ウイ...
序文これまで遭遇したデータベースのデッドロックはすべて、バッチ更新中のロック順序の不一致が原因でした...
プロジェクトの背景最近、webpackのバージョンが古いプロジェクトがあります。 リーダー層では今の...
1. ディレクトリホワイトリストを設定する:指定されたリクエストパスに制限を設定しないでください。た...
最近、データベースについて学び始めました。最初にやったことは、データベースとは何か、データベースとデ...
インターネット上の this.$set の説明はわかりにくいと感じます。単一データ、オブジェクト、配...
実際に参加したプロジェクトでは、MySQL テーブルのデータ量が数百万に達すると、通常の SQL ク...
目次1. ACIDの特性トランザクション制御構文3. トランザクション同時実行例外1. ダーティリー...
MySQLパスワードは正しいが、ローカルでログインできない -1045 ユーザー 'roo...
目次1. プロジェクトの説明1.1 背景1.2 実装設計1.2.1 従来の方法1.2.2 最適化され...