1. Standardmäßig verwendet innodb eine temporäre Tastensperre, um Datensätze zu sperren.
select ... for update
2. Wenn der Abfrageindex eindeutige Attribute enthält, wird die temporäre Tastensperre optimiert und auf eine Datensatzsperre herabgestuft, d. h. nur der Index selbst wird gesperrt, nicht der Bereich.
3. Die Tastensperre wird in verschiedenen Szenarien beeinträchtigt.
Instanzen
事务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
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die MySQL-Tastensperre. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!