锁机制
解决因资源共享造成的并发问题
示例:某网购平台平台仅剩一件衣服X
两个Women :WA、 WB
WA : X 抢购 X加锁===>下单===>付款===>卖家收到订单===>抢购完成
WB : X 抢购 X已经加锁===>等待阻塞中===>WA付款之后===>提示已经售空
锁分类
按照操作类型分
1. 读锁(共享锁)===>对于同一个数据(衣服X),多个操作可以同时进行,互不干扰。
2. 写锁(互斥锁)===>若当亲操作没有完成(WA准备对X下手),WB不能进行读写操作。(甚至不能看了)
按照操作范围分
1. 表锁(一次操作锁一张表)MyISAM存储引擎用的是表锁
1.1. 优势分析: 开销小,加锁快,无死锁.
1.2. 不足分析:粒度粗,容易放生锁的冲突,并发度低
2. 行锁(一次操作锁一条数据)InnoDB存储引擎使用行锁(MySQL默认)
2.1. 优势分析:锁的使用粒度细,不容易放生锁冲突,并发度高
2.2.不足分析:开销大,加锁慢,易死锁。
2.3 小概率问题:很小概率 发生高并发问题:脏读、幻读、不可重复度、丢失更新等问题
3. 页锁
数据准备
表锁
读锁特性
create table tablelock
(
id int primary key auto_increment ,
name varchar(20)
)engine myisam;
insert into tablelock(name) values('a1');
insert into tablelock(name) values('a2');
insert into tablelock(name) values('a3');
insert into tablelock(name) values('a4');
insert into tablelock(name) values('a5');
commit;
-- 增加所的语法
lock table 表1 read/write ,表2 read/write