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))