この記事では、MySQL トランザクションの分離レベルと MVCC による分離レベルの実装方法に関連するいくつかの問題について説明します。
トランザクションの 4 つの主要な特徴 (ACID)
-
原子性: トランザクションの最小作業単位。すべてが成功したか、すべてが失敗したか。
一貫性: トランザクションの開始と終了後、データベースの整合性は破壊されません。
分離: 異なるトランザクションは相互に影響しません。4 つの分離レベルは、RU (コミットされていない読み取り) と RC (コミットされた読み取り)、RR (反復可能読み取り) です。 )、SERIALIZABLE (シリアル化)。
耐久性 (耐久性): トランザクションが送信された後のデータへの変更は永続的であり、システムに障害が発生した場合でも失われることはありません。
トランザクションの分離レベル
UnCommitted/RU
を再び読み取ります。dirtyと呼ばれます。 reading では、あるトランザクションはコミットされていないデータを別のトランザクションから読み取ることができます。コミットされていないトランザクションはロールバックされる可能性があるため、この分離レベルは最も安全性が低くなります。
Read Committed/RC
Non-repeatable read とも呼ばれる、トランザクションが別のトランザクションを読み取りました。送信された変更されたデータにより、一貫性のない結果が生じます。現在のトランザクションの異なる時点で同じデータを読み取ることによって取得されます。
たとえば、次の例では、SessionA がトランザクション中に異なるデータを 2 回クエリしていることがわかります。その理由は、現在の分離レベルが RC であり、セッション A のトランザクションはセッション B によって送信された最新データを読み取ることができるためです。セッション A | セッション B | |
---|---|---|
begin; | ||
select * from user where id=1;(张三) | ||
update user set name='李思' where id=1; (デフォルトの暗黙的コミットトランザクション) |
4 | |
5 |
||
ユーザー セット名 = ' Wang Er' を更新where id=1;(デフォルトの暗黙的トランザクションコミット) | 6 | |
ファントム読み取り とも呼ばれるトランザクション読み取りは、他のトランザクションによって送信されたデータですが、RR 分離レベルでは、このデータの現在の読み取りは 1 回しか読み取ることができません。現在のトランザクションでは、何度読み取られても、データは依然として、そのトランザクションに対して読み取られた値です。最初の読み取り後に他のトランザクションがこのデータを変更して送信するため、変更されません。したがって、読み出されるデータが必ずしも最新のデータであるとは限らず、ファントムリードともなります。
例: セッション A で初めてデータが読み取られるとき、送信されたデータを変更する後続のトランザクションは、セッション A によって読み取られるデータ値に影響を与えません。これは繰り返し読める読書 です。
#発生時刻
セッション B | 1 | |
---|---|---|
2 | select * from user where id=1;(张三)||
3 | ||
4 | select * from user where id =1 ;(Zhang San)||
##5 | ||
6 |
select * from user where id=1;(Zhang San) | |
#シリアル化可能 |
データベースの読み取りまたは書き込み操作はすべてシリアル行実行であり、現在の分離レベルは同時実行のみをサポートしています。すべての操作はキューの実行を必要とします。したがって、この分離レベルにあるすべてのデータは最も安定していますが、パフォーマンスも最悪になります。データベースのロック実装は、この分離レベルのより粒度が小さいバージョンです。 |
#発生時刻
セッション A
1 | begin; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2 |
#begin; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 | ユーザー セット名を更新='李四' where id=1; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4 | select * from user where id=1;(待て、待て) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5 |
コミット; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6 | 選択* id=1 のユーザーから;(李思) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
トランザクションと MVCC の原則同じデータを同時に操作する異なるトランザクションによって引き起こされる問題例:
時点 T8 の SELECT ステートメント: 現在のバージョン チェーン:
時点 T11 の SELECT ステートメント: 現在のバージョン チェーン: MVCC の概要: いわゆる MVCC (Multi-Version Concurrency Control、マルチバージョン同時実行制御) とは、読み取り-書き込み 、書き込み-読み取り システムのパフォーマンスを向上させるために、操作は同時に実行されます。推奨学習: mysql ビデオ チュートリアル |
以上がMySQL トランザクションと MVCC によって達成される分離レベルについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

SQLコマンドは、DQL、DDL、DML、DCL、TCLのMySQLの5つのカテゴリに分割され、データベースデータの定義、操作、制御に使用されます。 MySQLは、語彙分析、構文分析、最適化、実行を通じてSQLコマンドを処理し、インデックスとクエリオプティマイザーを使用してパフォーマンスを向上させます。使用法の例には、データクエリの選択を選択し、マルチテーブル操作に参加します。一般的なエラーには、構文、ロジック、パフォーマンスの問題、および最適化戦略には、インデックスの使用、クエリの最適化、適切なストレージエンジンの選択が含まれます。

SQLの高度なクエリスキルには、複雑なデータ分析要件を処理できるサブクエリ、ウィンドウ関数、CTE、複雑な結合が含まれます。 1)サブクエリは、各部門で最高の給与を持つ従業員を見つけるために使用されます。 2)ウィンドウ関数とCTEを使用して、従業員の給与成長傾向を分析します。 3)パフォーマンス最適化戦略には、インデックスの最適化、クエリの書き換え、パーティションテーブルの使用が含まれます。

MySQLは、標準のSQL関数と拡張機能を提供するオープンソースリレーショナルデータベース管理システムです。 1)MySQLは、制限句の作成、挿入、更新、削除、拡張などの標準のSQL操作をサポートしています。 2)InnodbやMyisamなどのストレージエンジンを使用しています。これらは、さまざまなシナリオに適しています。 3)ユーザーは、テーブルの作成、データの挿入、ストアドプロシージャの使用など、高度な機能を介してMySQLを効率的に使用できます。

sqlmakesdatamanagemagementisibletoallbyproviding asimpleyetpowerfultoolset andmanagingdatabases.1)itworks withersortifyify what what what what what what what what whatysortsopecifyifyを許可します

SQLインデックスは、巧妙なデザインを通じてクエリパフォーマンスを大幅に改善できます。 1. Bツリー、ハッシュ、フルテキストインデックスなどの適切なインデックスタイプを選択します。 2。複合インデックスを使用して、マルチフィールドクエリを最適化します。 3.オーバーインデックスを避けて、データメンテナンスのオーバーヘッドを減らします。 4.不要なインデックスの再構築や削除など、定期的にインデックスを維持します。

SQLの制約を削除するには、次の手順を実行します。削除する制約名を特定します。 ALTER TABLEステートメントを使用してください:Table Table Name Drop Constraint Constraint Nameを変更します。削除を確認します。

SQLトリガーは、特定のイベントが指定されたテーブルで実行されたときに特定のアクションを自動的に実行するデータベースオブジェクトです。 SQLトリガーをセットアップするには、トリガー名、テーブル名、イベントタイプ、トリガーコードを含むCreate Triggerステートメントを使用できます。トリガーコードは、ASキーワードを使用して定義され、SQLまたはPL/SQLステートメントまたはブロックが含まれます。トリガー条件を指定することにより、Where句を使用して、トリガーの実行範囲を制限できます。トリガー操作は、インサート、更新、または削除ステートメントを使用してトリガーコードで実行できます。新しいキーワードと古いキーワードを使用して、トリガーコードの影響を受けるキーワードを参照できます。

インデックス作成は、データ列を並べ替えてデータ検索を加速するデータ構造です。 SQLクエリにインデックスを追加する手順は次のとおりです。インデックス化する必要がある列を決定します。適切なインデックスタイプ(Bツリー、ハッシュ、またはビットマップ)を選択します。 Create Indexコマンドを使用して、インデックスを作成します。インデックスを定期的に再構築または再編成して、その効率を維持します。インデックスの追加の利点には、クエリパフォーマンスの改善、I/O操作の削減、最適化された並べ替えとフィルタリング、および並行性の改善が含まれます。クエリが特定の列を使用することが多い場合、ソートまたはグループ化する必要がある大量のデータを返し、大きい複数のテーブルまたはデータベーステーブルが含まれます。インデックスの追加を検討する必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

WebStorm Mac版
便利なJavaScript開発ツール
