ホームページ  >  記事  >  データベース  >  MySQLデータベーストランザクションとストレージエンジンの詳細な説明

MySQLデータベーストランザクションとストレージエンジンの詳細な説明

青灯夜游
青灯夜游転載
2019-11-27 18:07:162484ブラウズ

MySQLデータベーストランザクションとストレージエンジンの詳細な説明

1. リレーショナル データベースと非リレーショナル データベース

1. リレーショナル データベースの特徴 :

#1) データはテーブルの形式で表示されます

##2) 各行にはさまざまなレコード名があります

3) 各列はレコード名に対応するデータ フィールドです

4) 多くの行と列がフォームを形成します

# 5) 複数のフォームがデータベースを形成します

2. リレーショナル データベースの利点:

1) 複雑なクエリ: SQL ステートメントを便利に使用できます1 つのテーブルと複数のテーブルの間で非常に複雑なデータ クエリを実行します。

#2) トランザクションのサポート: 高いセキュリティ パフォーマンスを備えたデータ アクセス要件を実現できます。

3. 非リレーショナル データベースの利点:

1) パフォーマンス: NOSQL はキーと値のペアに基づいています。テーブルとして 主キーと値の対応関係を SQL レイヤで解析する必要がないため、パフォーマンスが非常に高くなります。

2) スケーラビリティ: また、キーと値のペアに基づいているため、データ間の結合がないため、水平方向の拡張が非常に簡単です。

質問: 3 つの従来のデータベースの違いは何ですか?

回答: 3 つはデータ間の関係に基づいています。階層データベースはツリー構造を持ち、ネットワーク データベースはリンク ポインタ構造を持ちます。リレーショナル データベースは 2 つです。 -次元テーブル構造。

2. トランザクション (ACID)

トランザクションは、単一の論理単位として実行される一連のトランザクションです。 work オペレーション。これらのオペレーションは全体としてシステムに送信され、すべてが実行されるか、まったく実行されません。

トランザクションは、分割できない論理的な作業単位です。

トランザクションには、ACID 属性と呼ばれる次の 4 つの属性が必要です:

Atomicity

: Aトランザクションは完全な操作です。モノの各操作は分離できません (アトミック); すべてが実行されるか、何も実行されないかのどちらかです;

Consistency (一貫性)

: トランザクションが完了すると、データは一貫した状態である必要があります;

分離 (分離)

: データを変更するすべての同時トランザクションは相互に分離されており、トランザクションが相互に分離されている必要があることを示します。独立している必要があり、いかなる形でも他のトランザクションに依存したり影響を与えたりしてはなりません;

永続性 (耐久性)

: トランザクションの完了後、データベースへの変更は行われません。トランザクション ログは永続的であるため、トランザクションの永続性を維持できます。

トランザクション分離レベル:

コミットされていないコンテンツの読み取り

(ダーティ読み取り読み取りアンコミットとも呼ばれます): すべてのトランザクションが他のコミットされていないトランザクションの実行結果を確認できることを意味します。ダーティ リード、反復不可能な読み取り、ファントム リードの問題が発生する可能性があります。

送信されたコンテンツの読み取り

(コミットされた読み取り): トランザクションは、送信されたトランザクションによって行われた変更のみを確認できます。ダーティ リードは回避できますが、反復不可能な読み取りやファントム リードの問題が発生する可能性があります。

Repeatable read

(repeatable read): これは MySQL のデフォルトのトランザクション分離レベルであり、同じトランザクションの複数のインスタンスが同時にデータを読み取るときに、同じデータ行が表示されます。ダーティ リードと非反復読み取りは回避でき、ファントム リードが発生する可能性があります。

Serializable

(シリアル化可能): 最も高い分離レベルです。各読み取りデータ行に共有ロックを追加して、読み取りを防止します。と競合する可能性があります。相互に連携することで、ファントム読み取りの問題を解決します。ダーティ リード、非反復読み取り、ファントム リードを回避できます。

同時トランザクションによって引き起こされる問題:

1. 更新が失われます

: 2 つのトランザクション T1 と T2 が同じデータを読み取り、変更しました。T2 によって送信された結果が T1 によって送信された結果を上書きし、T1 の変更が失われます。

#2. ダーティ リード

: トランザクション T1 は特定のデータを変更し、ディスクに書き戻しました。トランザクション T2 が同じデータを読み取った後、T1 は、理由は取り消されます。このとき、T1 の変更されたデータは元の値に復元されます。T2 によって読み取られたデータはデータベース内のデータと一致しません。したがって、T2 によって読み取られたデータは「ダーティ」データ、つまり不正なデータになります。データ。

3. 反復不可能な読み取り: トランザクション内で同じデータを複数回読み取ることを指します。このトランザクションが終了する前に、別のトランザクションも同じデータにアクセスしました。その後、最初のトランザクションの 2 回のデータ読み取りの間で、2 番目のトランザクションの変更により、最初のトランザクションで 2 回読み取られたデータが異なる可能性があります。これは、トランザクション内で同じクエリによって 2 回読み取られたデータが異なることを意味するため、非反復読み取りと呼ばれます。

4. ファントム読み取り: 例: 現在、給与 5,000 の従業員が 10 人いて、トランザクション A は給与 5,000 の従業員 10 人全員を読み取ります。このとき、トランザクション B は給与 5,000 のレコードを挿入しました。このとき、トランザクション A は給与 5,000 の従業員を再度読み取り、レコードは 11 になります。このときファントムリードが発生します。

#ノンリピートリードとファントムリードの違いは何ですか? 非反復読み取りの焦点は変更であり、ファントム読み取りの焦点は追加または削除です。

MVCC (マルチバージョン同時実行制御メカニズム): InnoDB の MVCC は、レコードの各行の後に渡されます。これは、2 つの非表示列を保存することによって実現されます。行の作成時刻と行の削除時刻がそれぞれ保存されます (ここに保存されるのは実際の時間値ではなく、システムのバージョン番号です)。新しいトランザクションが開始されるたびに、システムのバージョン番号が自動的に増加します。トランザクション開始時のシステム バージョン番号は、クエリされたレコードの各行のバージョン番号と比較するためのトランザクション ID として使用されます。MVCC を使用すると、反復読み取り分離レベルではファントム読み取りが発生しなくなります。

3. ストレージ エンジン

ストレージ エンジンはデータベースの基盤となるソフトウェア組織であり、データベース管理システム (DBMS) はデータを使用します。データの作成、クエリ、更新、削除を行うエンジン。

1. InnoDB (クラスター化インデックス方式)

innodb の基礎となるストレージ構造は B ツリーであり、ツリーの各ノードは対応します。 innodb. のページに、ページ サイズは固定されており、通常は 16K に設定されます。非リーフ ノードにはキー値のみが含まれ、リーフ ノードには完全なデータが含まれます。

使用シナリオ: 1) 頻繁に更新されるテーブルは複数の同時更新リクエストを処理します;

2) トランザクションセーフなテーブル (ACID) をサポートします。行ロックと外部キー;

3) bin-log ログなどを通じて復元できます。

innodb主キーが設定されていない場合, 6 バイトの主キーが自動的に生成されます (ユーザーには表示されません)。

2. MyISAM (非クラスター化インデックス モード)

MyISAM は、パフォーマンスを重視した MySQL 5.1 より前のデフォルトのストレージ エンジンでした。ただし、トランザクションはサポートされておらず、行ロックや外部キーもサポートされていません。テーブル ロックはサポートされていますが、データの挿入または更新時にはテーブル全体をロックする必要があり、効率が低下します。実際のデータではなく、インデックスのみがキャッシュされます。 MyISAM はデータを非常に速く読み取り、多くのメモリとストレージ リソースを占有しません。

MyISAM は主キーの存在を許可せず、静的なインデックス構造です。

質問: MySQL の MyISAM と InnoDB の違いは何ですか?

回答: MySQL データベースでは、最も一般的に使用される 2 つのエンジンは innodb と myisam です。現在、InnoDB は MySQL のデフォルトのストレージ エンジンです。

1) トランザクション: MyISAM はパフォーマンスを重視しており、クエリ速度は InnoDB 型よりも高速ですが、トランザクションはサポートしていません。 InnoDB はトランザクション サポートを提供します。

2) 外部キー: MyISAM は外部キーをサポートしませんが、InnoDB は外部キーをサポートします。

3) ロック: MyISAM はテーブル レベルのロックのみをサポートします。InnoDB は行レベルのロックとテーブル レベルのロックをサポートします。デフォルトは行レベルのロックです。行ロックによりパフォーマンスが大幅に向上します。マルチユーザーの同時操作のパフォーマンス。 innodb は挿入および更新操作が多数ある状況に適しており、myisam はクエリが頻繁に行われる状況に適しています。さらに、innodb テーブルの行ロックは絶対的ではありません。SQL ステートメントの実行時に MySQL がスキャンする範囲を決定できない場合、innodb はテーブル全体もロックします。例: update table set num=1 where name like " �a%"。

4) フルテキスト インデックス: MyISAM はフルテキスト インデックスをサポートしますが、Innodb はフルテキスト インデックスをサポートしません。 innodb は、MySQL 5.6 以降でフルテキスト インデックスのサポートを提供します。

5) テーブルの主キー: Myisam は主キーのないテーブルの存在を許可します; innodb: 主キーが設定されていない場合、6 バイトの主キーが自動的に生成されます (ユーザーには表示されません)。ユーザー)。

6) テーブル内の特定の行数: myisam: select count(*) from table。myisam は単に保存された行の数を読み取ります。 myisam にはカウンタが組み込まれているため、カウントするときにカウンタから直接読み取ります(*)。

innodb:不保存表格的具體行數,也就是說,執行select count(*) from table 時,innodb要掃描一遍整個表來計算有多少行。

推薦學習:MySQL教學

#

以上がMySQLデータベーストランザクションとストレージエンジンの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。