1. デフォルトでは、innodb は一時的なキー ロックを使用してレコードをロックします。
select ... for update
2. クエリ インデックスに一意の属性が含まれている場合、一時キー ロックは最適化され、レコード ロックにダウングレードされます。つまり、範囲ではなくインデックス自体のみがロックされます。
3. 一時的なキー ロックは、さまざまなシナリオで機能が低下します。
例
事务1 start transaction; select SLEEP(4); select * from test where age=22 for update; select * from test where age>23 for update; select sleep(20); commit; ************************** 事务2 start transaction; select sleep(8); select * from test where age=20 for update; select * from test where age=21 for update; select * from test where age=22 for update; select * from test where age=23 for update; commit; ************************************ 事务执行状态 事务1 start transaction > OK > 时间: 0s select SLEEP(4) > OK > 时间: 4.001s select * from test where age=22 for update > Affected rows: 0 > 时间: 0.001s select * from test where age>23 for update > Affected rows: 0 > 时间: 0.001s select sleep(20) > OK > 时间: 20s commit > OK > 时间: 0.001s *********************** 事务2 start transaction > OK > 时间: 0.001s select sleep(8) > OK > 时间: 8s select * from test where age=20 for update > Affected rows: 0 > 时间: 0.001s select * from test where age=21 for update > Affected rows: 0 > 时间: 0.001s select * from test where age=22 for update > Affected rows: 0 > 时间: 14.158s select * from test where age=23 for update > Affected rows: 0 > 时间: 0.001s commit > OK > 时间: 0s
以上がmysqlキーロックの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。