mysql 锁操作

mysql默认存储引擎innodb自动会添加锁,

使用索引作为检索条件修改数据时采用行锁,否则采用表锁索引失效时)。

 

读锁(共享锁):

不同的线程或进程读取表不会相互影响,修改表会相互影响,某线程锁了表后只能读取该表,不能修改表,不能读取其他的表,其他的线程可以读取该表,但修改该表会阻塞

 

写锁(排他锁):

不同的线程或进程读取修改表会相互影响,某线程锁了表后只能读取该表修改表,不能读取其他的表,其他的线程读取修改该表会被阻塞

 

表锁(偏读锁)

简而言之,就是读锁会阻塞写,但是不会堵塞读。而写锁则会把读和写都堵塞。

 

查看是否有锁(In_use为1:有锁)

show open tables;

添加读锁

lock table  mytable read;

添加写锁

lock table  mytable write;

释放锁

unlock tables;

 

用来分析表的锁定

show status like 'table%';

 

行锁(偏写锁)

用于分析行锁定

show status like 'innodb_row_lock%';

 

 

  

设置不自动提交事务

set autocommit=0;

 

mysql默认存储引擎innodb自动会添加行锁,会自动提交(commit)

使用索引作为检索条件修改数据时采用行锁,否则采用表锁索引失效时)。

commit提交后自动解除行锁

 

 

 

间隙锁(使用范围条件检索数据,并请求共享或排他锁时,会给范围中加锁,无论是否存在记录)

 

 

 

 

 

锁定某一行(在事务中使用for update,会在该行添加排他锁,直到提交后(commit))

 

posted @ 2021-08-18 17:02  低调的。。。  阅读(210)  评论(0编辑  收藏  举报