MySQLロックメカニズム
通常持っている
-
行ロック
行レベルのロックは、Mysqlで最も細かいロックの粒度です。つまり、現在の操作の行のみがロックされます。行レベルのロックにより、データベース操作の競合を大幅に減らすことができます。ロックの粒度は最小ですが、ロックのオーバーヘッドも最大です。デッドロックが発生している可能性があります。 -
テーブルロック
テーブルレベルのロックは、mysqlロックの最大のロックタイプです。つまり、現在の操作はテーブル全体をロックし、リソースのオーバーヘッドは行ロックよりも少なく、デッドロックはありませんが、ロックの競合の可能性は高くなります。 。 -
ページロック
ページレベルのロックは、MySQLの行レベルのロックとテーブルレベルのロックの間でロックの粒度を持つロックの一種です。
一般的な実行エンジンはこれら2つのロックをサポートします
実現する方法
InnoDBの行ロックがされている通过给索引上的索引项加锁
実装。MySQLがデータブロックに対応するデータ行をロックすることによって実現されているOracle、異なっています。
InnoDBの行ロック実装機能は、次のことを意味します。只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!
使用方法に応じて、行ロックとテーブルロックは次のように分類できます。
-
共有ロック(読み取りロック):トランザクションが行を読み取れるようにし、他のトランザクションが同じデータセットで排他ロックを取得できないようにします。
-
排他ロック(書き込みロック):排他ロックを取得するトランザクションがデータを更新できるようにし、他のトランザクションが同じデータセットの共有読み取りロックと排他書き込みロックを取得できないようにします。