4.1 概述
4.1.1 定义
![](https://img.haomeiwen.com/i4639175/346d1aad4a70c9c1.jpg)
4.1.2 生活购物
![](https://img.haomeiwen.com/i4639175/22f3ce091785f4b3.jpg)
4.1.3 锁的分类
从数据操作的类型(读、写)分
读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响
写锁(排它锁):当前写操作没有完成前,它会阻断其他写锁和读锁。
从对数据操作的颗粒度
表锁
行锁
4.2 三锁
4.2.1 表锁(偏读)
特点
偏向MyISAM存储引擎,开销小,加锁快,无死锁,锁定粒度大,发生锁冲突的概率最高,并发最低
案例分析
建表SQL
![](https://img.haomeiwen.com/i4639175/2070904f56abb935.jpg)
![](https://img.haomeiwen.com/i4639175/5ee87c1c33d8b493.jpg)
加读锁
![](https://img.haomeiwen.com/i4639175/08cd949b3babd188.jpg)
![](https://img.haomeiwen.com/i4639175/55743d496dd5821a.jpg)
![](https://img.haomeiwen.com/i4639175/2cef73355071e8c4.jpg)
加写锁
![](https://img.haomeiwen.com/i4639175/4efde12fbd013254.jpg)
![](https://img.haomeiwen.com/i4639175/16787681ddc81a81.jpg)
案例结论
![](https://img.haomeiwen.com/i4639175/f317b34d2fe6052b.jpg)
![](https://img.haomeiwen.com/i4639175/42038dbe9f6734bb.jpg)
表锁分析
![](https://img.haomeiwen.com/i4639175/a078903fbe69e12b.jpg)
![](https://img.haomeiwen.com/i4639175/6a8cae0501dfb076.jpg)
![](https://img.haomeiwen.com/i4639175/e956e9ffc40e1980.jpg)
4.2.2 行锁(偏写)
特点
偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用了行级锁
由于行锁支持事务,复习老知识
事务(Transation)及其ACID属性
![](https://img.haomeiwen.com/i4639175/e9f6666ff7a97909.jpg)
并发事务处理带来的问题
更新丢失(Lost Update)
![](https://img.haomeiwen.com/i4639175/b3befb645c96134b.jpg)
脏对(Dirty Reads)
![](https://img.haomeiwen.com/i4639175/10efd2ad043525c1.jpg)
不可重复读(Non-Repeatable Reads)
![](https://img.haomeiwen.com/i4639175/896bab4b3aa26353.jpg)
幻读(Phantom Reads)
![](https://img.haomeiwen.com/i4639175/63fd2c96be4071fa.jpg)
事务隔离级别
![](https://img.haomeiwen.com/i4639175/5d88d5c97575b255.jpg)
案例分析
建表SQL
![](https://img.haomeiwen.com/i4639175/93a34f519caa0079.jpg)
行锁定基本演示
![](https://img.haomeiwen.com/i4639175/266d6e6e126e86da.jpg)
无索引行锁升级为表锁
varchar 不用 ' ' 导致系统自动转换类型, 行锁变表锁
间隙锁危害
![](https://img.haomeiwen.com/i4639175/5e2ceb033928583d.jpg)
![](https://img.haomeiwen.com/i4639175/0ad6d86ac1239786.jpg)
面试题:常考如何锁定一行
![](https://img.haomeiwen.com/i4639175/1c6f132450220114.jpg)
案例结论
![](https://img.haomeiwen.com/i4639175/f7f6ebc802ed9a53.jpg)
行锁分析
![](https://img.haomeiwen.com/i4639175/291a5c706a303940.jpg)
![](https://img.haomeiwen.com/i4639175/02c60599a4d077b1.jpg)
优化建议
尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁
合理设计索引,尽量缩小锁的范围
尽可能较少检索条件,避免间隙锁
尽量控制事务大小,减少锁定资源量和时间长度
尽可能低级别事务隔离
4.2.3 页锁
Subtopic
开销和加锁时间界于表锁和行锁之间:会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
了解一下即可
网友评论