-
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
- サイズ2
-
データベーストランザクションの4つの主要な特性
- A
- 原子性(すべて成功するか、すべて失敗)
- C
- 一貫性
- 私
- アイソレーション(複数のトランザクションの同時実行、トランザクションは、他のサービスに影響を与えません)
- D
- 持久性
- A
-
引き起こされるトランザクション並行性の問題3
- ロストアップデート
- データベースレベルでのすべてのMySQLトランザクション分離レベルを回避することができます
- データベースレベルでのすべてのMySQLトランザクション分離レベルを回避することができます
- ダーティー読み取り
- READ-COMMITTEDトランザクション分離レベルは、上記に回避することができます
- 複数のトランザクションを行う場合、データは、トランザクションさらにコミットされていないトランザクションを読み取ります
- 再読み込みません4
- オーバー回避するために、REPEATABLE-READトランザクション分離レベル
- トランザクションBの提出、データトランザクションと読み取りの前には同じではありません後にトランザクションは、トランザクションおよびB同時実行、トランザクション読み出したデータを複数回ある場合には
- マジック読書
- 避けるために、SERIALIZABLEトランザクション分離レベル
- 以上の以下のレコードの数、ファントム読み取りの出現に影響を及ぼした影響を与える時事その結果、現在のトランザクションのインパクトゾーン内のレコード別のトランザクションを追加または削除
- ロストアップデート
-
現在の読み取りと読み取りのスナップショット
- 現在の読み取りが最新のデータを読んで、ロックされます(
lock in share mode
、for update
、update/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の構文
- グループによる
- グループ化カラムとして句の列名または列の必須機能を選択
- 列関数は、グループによってグループごとに結果を返します
- ました
- 多くの場合でグループを使用
- ここで、ラインフィルタ、フィルタ群を有します
- 顺序:持つ>で>グループ
- グループによる