mysql临键锁的使用

美女程序员鼓励师

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临键锁的使用,希望对大家有所帮助。更多mysql学习指路:MySQL

推荐操作系统:windows7系统、mysql5.8、DELL G3电脑

以上是 mysql临键锁的使用 的全部内容, 来源链接: utcz.com/z/546155.html

回到顶部