# 表锁
MyISAM用表锁,开销小、加锁快;无死锁;但锁的范围大,容易发生锁冲突、并发度低
--读锁
lock table t_user read;
--写锁
lock table t_user write;
-- 查询哪个表被锁定了
show open tables;
-- 解锁(释放被当前线程持有的任何锁)
unlock tables;
# 页锁
传说中是介于表锁和行锁之间的一种锁,但是查了很多资料,很少有用页锁的,只有BDB引擎用页锁
# 行锁
InnoDB用行锁,开销大,加锁慢;容易出现死锁;锁的范围较小,不易发生锁冲突,并发度高
--一般情况下,Mysql是默认提交的,想看行锁的效果,需要关一下自动提交
-- 不自动提交
set autocommit =0;
-- 自动提交
set autocommit =1;
# 间隙锁
间隙锁是行锁衍生出来,比如说在行锁的场合下
update t_user set name='张三' where id < 10;
假设只有id为1、2、3的三条数据,4-9都是没有的,那么4-9这几条就被成为间隙,也会被锁定
# 行锁的死锁
行锁很容易发生死锁,比如说A更新B,B更新A,两个就互相等待了
# 分析表锁定情况
show status like 't_user';
通过Table_locks_immediate、Table_locks_waited分析锁定情况