あなたのケースを見て、これらのロックがどのように機能するかを説明しましょう:
1件
T1は、テストテーブルのいくつかの行を更新しようとしています。このトランザクションにより、すべてのテーブルにIXロックが設定され、最初の5行にXロックが設定されます。
T2は、テストテーブルのいくつかの行を更新しようとしています。このトランザクションは、すべてのテーブルにIX(IXはIXと互換性があるため)ロックをかけ、最初の5行を試行しますが、XはXと互換性がないため、実行できません。
だから私たちは元気です。
2.1ケース
T1は、テストテーブルのいくつかの行を更新しようとしています。このトランザクションにより、すべてのテーブルにIXロックが設定され、最初の5行にXロックが設定されます。
T2は、テストテーブルからいくつかの行を選択したいと考えています。また、ロックは設定されません(InnoDBは非ロック読み取りを提供するため)
2.1ケース
T1は、テストテーブルのいくつかの行を更新しようとしています。このトランザクションにより、すべてのテーブルにIXロックが設定され、最初の5行にXロックが設定されます。
T2は、テストテーブルの一部の行を更新(更新用に選択)したいと考えています。テーブル全体にISを配置し、行でSロックを取得しようとしますが、XとSに互換性がないため、失敗します。
また、常に分離レベルに注意してください。レベルが異なると、ロックを解放/取得するメカニズムも異なります
お役に立てば幸いです