【インタビュー質問】MySQLロック機構

MySQLロックメカニズム

ここに画像の説明を挿入

通常持っている

  • 行ロック
    行レベルのロックは、Mysqlで最も細かいロックの粒度です。つまり、現在の操作の行のみがロックされます。行レベルのロックにより、データベース操作の競合を大幅に減らすことができます。ロックの粒度は最小ですが、ロックのオーバーヘッドも最大です。デッドロックが発生している可能性があります。

  • テーブルロック
    テーブルレベルのロックは、mysqlロックの最大のロックタイプです。つまり、現在の操作はテーブル全体をロックし、リソースのオーバーヘッドは行ロックよりも少なく、デッドロックはありませんが、ロックの競合の可能性は高くなります。 。

  • ページロック
    ページレベルのロックは、MySQLの行レベルのロックとテーブルレベルのロックの間でロックの粒度を持つロックの一種です。




一般的な実行エンジンはこれら2つのロックをサポートします

ここに画像の説明を挿入




実現する方法

InnoDBの行ロックがされている通过给索引上的索引项加锁実装。MySQLがデータブロックに対応するデータ行をロックすることによって実現されているOracle、異なっています。

InnoDBの行ロック実装機能は、次のことを意味します。只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!




使用方法に応じて、行ロックとテーブルロックは次のように分類できます。

  • 共有ロック(読み取りロック):トランザクションが行を読み取れるようにし、他のトランザクションが同じデータセットで排他ロックを取得できないようにします。

  • 排他ロック(書き込みロック):排他ロックを取得するトランザクションがデータを更新できるようにし、他のトランザクションが同じデータセットの共有読み取りロックと排他書き込みロックを取得できないようにします。

おすすめ

転載: blog.csdn.net/qq_42380734/article/details/108713516