MySQLロックとトランザクション

2070 ワード

文書ディレクトリ
  • 表錠
  • 行ロック
  • トランザクションの4つの特性
  • トランザクションの独立性レベル
  • テーブルロック
    オーバーヘッドが小さく、ロックが速く、ロック粒度が大きく、同時度が最も低く、myiasmストレージエンジンに偏り、ロックが発生する確率が最も高い.innodbはテーブル・ロックとロー・ロックをサポートし、デフォルトでは非表示のプライマリ・キー・インデックスが作成されます. IS:は、次にどのロックが必要かをデータベースに通知し、テーブルをロックします.レコードAに共有ロックを追加する必要がある場合、innodbはまずこのテーブルを見つけ、そのテーブルに意向共有ロックを追加した後、レコードAに共有ロックを追加します. IX:は、次にどのロックが必要かをデータベースに通知し、テーブルをロックします.レコードAに排他ロックを追加する必要がある場合、innodbはまずこのテーブルを見つけ、そのテーブルに意図的に排他ロックを追加した後、レコードAに排他ロックを追加します.
    行ロック
    オーバーヘッドが大きく、ロックが遅く、デッドロックが発生し、ロック粒度が小さく、同時度が高く、innodbストレージエンジンに偏り、ロックが発生する確率が最も低い. (X ): Aトランザクションの処理が完了していない場合、他のトランザクションは読み込めますが、書き込みや更新はできません.Aがロックを解除するまで.DML文の操作にデフォルトでXロックを追加するか、手動でfor updateを追加できます. (S ):トランザクションTがデータオブジェクトAにSロックをかけると、トランザクションTはAを読むことができるが、Aを変更することはできず、他のトランザクションはAにSロックを加えるしかなく、TがAのSロックを解放するまでXロックを加えることはできない.簡単に言えば、データを表示できますが、データを変更および削除できないロックです.複数のトランザクションを同時に所有できます.
    トランザクションの4つの特性 (Atomicity):すべての文は、1つのユニットとしてすべて正常に実行されたか、すべてキャンセルされました.中間ステータス (Consistency):は、データベースがトランザクションの開始時に一貫している場合、トランザクションの実行中に一貫したステータスを保持することはできません. (Isolation):トランザクション間で相互に影響を与えることはできません. (Durability):トランザクションが正常に完了すると、すべての変更がデータに正確に記録され、失われません.
    トランザクションの独立性レベルRU(read-uncommitted):未読コミットは、ダーティリード(トランザクションAは、トランザクションBが変更されたがコミットされていないデータを読み取り、Bトランザクションがロールバックされると、Aが読み込んだデータが無効になる)が発生し、一貫性に合致しない可能性があります.汚れた読み取り可能、繰り返し不可能、幻の読み取り可能RC(read-committed):はコミットされたものを読み、幻読み(トランザクションAがトランザクションBにコミットされた変更されたデータを読み込んだ)と繰り返し読み取り不可(update/deleteによって一般的にコミットされた他のトランザクションに読み込まれたデータ)が発生する可能性があります.汚い読みは不可能、繰り返し読みは不可能、幻読みは可能RR(repeatable-read):(1つのトランザクションが他のトランザクションに挿入されたデータを読み取り、一般的にinsertによって生じる)を繰り返すことができ、機能は「幻読み」現象を防止し、undoのスナップショット技術+GAP(スロットロック)+NextLock(下キーロック)を使用する.SR(serializable):はシリアル化可能である.デッドロックは防止できますが、同時トランザクションはパフォーマンスが悪いです.汚れて読む、繰り返して読むことができない、幻で読むことはできない.
    transaction_isolation=read-uncommitted transaction_isolation=read-committed transaction_isolation=REPEATABLE-READ