浅谈MYSQL X锁和S锁

174 阅读1分钟

开启一个事务之后

如果A事务当中有语句加入了一个排它锁,那么A事务没有提交之前。其他事务只能读取这个而不能写入或者更新

A事务:

start transaction ;  select * from table_name where id =1 for update ;

B事务:

update table_name set count = count - 1 where id= 1;

如果A事务没有执行提交的话,B事务会阻塞直到A事务提交之后才会执行。

如果A事务这个id是主键的话,INODB引擎下是会产生一个行级锁,就是能对其他行和列进行操作。否者的话是一个表锁。

S锁

事务A对数据1加了S锁之后,只能对其进行读取而不能更改。 在事务A提交之前,其他事务也是只能读取不能更改。

也就是其他事务也只能加S锁,而不能加排他锁。