一、锁机制
解决因资源共享,而造成的并发问题
示例:买最后一件衣服X
A: 看见X 买了X
B: 看见X 买了X
解决方法:
A: 看见X 买:X加锁->试衣服、下单、付款、打包->X解锁
B: 看见X 买:发现X已被解锁,等待X解锁,解锁完毕,X已售空
1、分类
1.1 操作类型
- 读锁(共享锁):对同一个数据(衣服),多个读操作可以同时进行,互不干扰
- 写锁(互斥锁):如果当前写操作没有完毕(买衣服的一系列操作),则无法进行其他的读操作、写操作
1.2 操作范围
表锁:一次性对一张表整体加锁。
如MyISAM存储引擎使用表锁,开销小,加锁快;无死锁;但锁的范围大,容易发生锁冲突,并发度低。
行锁:一次性对一条数据加锁
如InnoDB存储引擎使用行锁,开销大,加锁慢;容易出现死锁;锁的范围较小,不易发生锁冲突,并发度高(很小概率发生高并发问题:脏读、幻读、不可重复读、丢失更新等)
页锁
1.3 示例
表锁:
1 | -- 创建表 |