MySQLの概要--- 3

  • MyISAMテーブルとInnoDBのロックとの違い

    • MyISAMテーブルは、デフォルトのテーブル・レベルのロッキングで、行レベルのロックがサポートされていません
    • InnoDBはデフォルトの行レベルのロックであり、また、テーブルレベルのロックをサポート
  • MyISAMテーブル

    • MyISAMテーブルには、トランザクションをサポートしていません。
    • 自動的にクエリテーブル(上の読み取りロックインデックスに行うには、テーブルレベルロックは何もありません
    • ときに追加および削除を自動的にテーブルプラス書き込みロック
    • ディスプレイプラス/解除ロックlock tables 表名 read | write; unlock tables
    • select文の書き込みロックに表示select * from 表 where··· for update
  • InnoDBの

    • InnoDBはトランザクションをサポートしている(デフォルトのトランザクションが自動的に提出)
    • 変更トランザクションが自動的に設定を提出します:show variables like 'autocommit'; set autocommit = 0;
    • それはで、配置することがないかもしれないbegin transaction+ xxxsql
    • InnoDBは非ブロックを選択することで、デフォルトはロック、ロック画面プラス読みせずに読んで:select * from 表名 where ··· lock in share mode;
    • 条件は、インデックスを取っていない、使用テーブルレベルロック、旅行時間インデックス、行レベルのロックまたはロックギャップ(ギャップロック、ロックギャップが、通常の非一意インデックスを使用します)
  • MyISAMの適切なシーン

    • 頻繁に全表行うcount文を1
    • データの周波数への追加や削除が高い、非常に頻繁にクエリではありません
    • いいえ取引ん
  • InnoDBのシーンに適しました

    • 変更、検索データシステムへの追加や削除が頻繁にあります
    • 高い信頼性要件、トランザクションシステムをサポートする必要性
  • データベースのロック分類

    • サイズ2
      • テーブル・レベルのロック(表および行ロックの間に)、行レベルロック、ページレベルのロック
    • レベル
      • 共有ロック(読み取りロック)、排他ロック(書き込みロック)
    • オペレーティング
      • ロックDML(データラッチ)、DDLロック(ロックテーブル構造)
    • 使用
      • オプティミスティック・ロック、悲観的ロック
      • オプティミスティック・ロック簡単に実現:その後、設計テーブル、バージョンフィールドのバージョンの追加、レコードを変更するたびに、最初にこのフィールドにレコードを読み、条件を更新するには、フィールドの上に置きます
      • select version as v from 表 + update 表 set version = version+1 and ··· where ··· and version = v

  • データベーストランザクションの4つの主要な特性

    • A
      • 原子性(すべて成功するか、すべて失敗)
    • C
      • 一貫性
      • アイソレーション(複数のトランザクションの同時実行、トランザクションは、他のサービスに影響を与えません)
    • D
      • 持久性
  • 引き起こされるトランザクション並行性の問題3

    • ロストアップデート
      • データベースレベルでのすべてのMySQLトランザクション分離レベルを回避することができます
        ここに画像を挿入説明
    • ダーティー読み取り
      • READ-COMMITTEDトランザクション分離レベルは、上記に回避することができます
      • 複数のトランザクションを行う場合、データは、トランザクションさらにコミットされていないトランザクションを読み取ります
    • 再読み込みません4
      • オーバー回避するために、REPEATABLE-READトランザクション分離レベル
      • トランザクションBの提出、データトランザクションと読み取りの前には同じではありません後にトランザクションは、トランザクションおよびB同時実行、トランザクション読み出したデータを複数回ある場合には
    • マジック読書
      • 避けるために、SERIALIZABLEトランザクション分離レベル
      • 以上の以下のレコードの数、ファントム読み取りの出現に影響を及ぼした影響を与える時事その結果、現在のトランザクションのインパクトゾーン内のレコード別のトランザクションを追加または削除
        ここに画像を挿入説明
  • 現在の読み取りと読み取りのスナップショット

    • 現在の読み取りが最新のデータを読んで、ロックされます(lock in share modefor updateupdate/delete/insert
    • スナップショットを読みます:
      • select(トランザクション分離レベルではない非ブロック読み取りロック解除serializable
      • 注:時間のスナップショットを作成するためには、データのバージョンを読んで判断し
        ここに画像を挿入説明
  • RC、RR次のレベルは、非ブロッキング読み込み達成するために

    • 余分なストレージの各行DB_TRX-ID(トランザクションID後の動作)、 DB_ROLL_PTR(ロールバックポインタ)、 DB_ROW_ID(行番号、単一によって隠された主キー
    • undo 日志 (insert undo log/update undo log)
      ここに画像を挿入説明
  • ネクストキーロック(ロック行ロック+ギャップ)

    • 場合はwhere、すべてのヒットの条件は、ロックギャップを使用していません
      ここに画像を挿入説明
    • 場合whereの条件は、完全なヒットヒットの一部またはではありません、それはロックギャップを追加します
    • ギャップがロックされると、非一意のインデックスインデックスを行くために行くかしないようにする場合
      ここに画像を挿入説明
      ここに画像を挿入説明(すべてのインデックスは隙間ロック、同様のテーブルロックが、オーバーヘッドが増加します行っていません)
  • SQLの構文

    • グループによる
      • グループ化カラムとして句の列名または列の必須機能を選択
      • 列関数は、グループによってグループごとに結果を返します
    • ました
      • 多くの場合でグループを使用
      • ここで、ラインフィルタ、フィルタ群を有します
      • 顺序:持つ>で>グループ

  1. MyISAMテーブルは、テーブルを保存する行の可変数を持っており、全表スキャンを必要とせずに↩︎

  2. より細かい粒子サイズをロックし、コストが高いです↩︎

    • ビュートランザクション分離レベル:select @@tx_isolation;
    • トランザクション分離レベルを設定します。set session transaction isolation level read uncommitted
    ↩︎
  3. 反復可能読み取りは、データエラーを引き起こす可能性があり、変数に変更使用することが提案された变量 = 变量 + ···特定の置換変数の割り当ての形を变量 = ··· ↩︎

公開された20元の記事 ウォンの賞賛0 ビュー987

おすすめ

転載: blog.csdn.net/qq_43186092/article/details/104769376