一、数据库锁
1.1 锁的概念
锁是计算机协调多个进程或线程并发访问某一资源的机制
1.2 锁的分类
● 操作类型区分
- 读锁:读锁是共享锁,即针对同一份数据,对个读操作可以同时进行而不会互相影响
- 写锁:写锁是排它锁,在当前写操作没有完成前,会阻断其他读锁和写锁
● 操作粒度区分
- 表锁:偏向 MyISAM 存储引擎,开销小,加锁快;无死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低
- 行锁:偏向 InnoDB 存储引擎,开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高
- 页锁
1.3 读锁
create table mylock(
id int not null primary key auto_increment,
name varchar(20)
)engine myisam;
insert into mylock(name) values('a');
insert into mylock(name) values('b');
insert into mylock(name) values('c');
insert into mylock(name) values('d');
insert into mylock(name) values('e');
select * from mylock;
# 查看表的加锁情况
show open tables;
# 手动增加表锁
lock table [表名] read(write), [表名2] read(write),其他..
示例:
lock tble mylock read, book write;
# 解锁
unlock tables;
1.4 写锁
1.5 表锁定分析
1.6 行锁
注意:
索引失效可能导致行锁变为表锁,特别是 varchar 字段忘记加引号
# 加行锁
select * from test_innode_lock where a=8 for update;
1.7 间隙锁
1.8 总结
二、 MySQL 主从复制