1.概述
1.1定义
1.2生活购物
1.3锁的分类
1.3.1从对数据操作的类型(读\写)分
1.读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。
2.写锁(排它锁):当前写操作没有完成前,它会阻断其他写锁和读锁。
1.3.2从对数据操作的粒度分
1.表锁
2.行锁
2.三锁
2.1表锁(偏写)
2.1.1特点
偏写MyISAM粗才能引擎,开销小,加锁快;无死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
2.1.2案例分析
2.1.2.1建表SQL
2.1.2.2加读锁
2.1.2.3加写锁
2.1.3案例结论
2.1.4表锁分析
2.2行锁(偏写)
2.2.1特点
1.偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁定粒度最下,发生锁冲突的概率最低,并发度也最高。
2.InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用了行级锁
2.2.2由于行锁支持事务,复习老知识
2.2.2.1事务(Transaction)及其ACID属性
2.2.2.2并发事务处理带来的问题
1.更新丢失(Lost Update)
2.脏读(Dirty Reads)
3.不可重复读(Non-Repeatable Reads)
4.幻读(Phantom Reads)
2.2.2.3事务隔离级别
2.2.3案例分析
2.2.3.1建表SQL
2.2.3.2行锁定基本演示
2.2.3.3无索引行锁升级为表锁
2.2.3.4间隙锁危害
2.2.3.5常考如何锁定一行
2.2.4案例结论
2.2.5行锁分析
2.2.6优化建议
1.尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁。
2.合理设计索引,尽量缩小锁的范围
3.尽可能较少检索条件,避免间隙锁
4.尽量控制事务大小,减少锁定资源量和时间长度
5.尽可能低级别事务隔离
2.3页锁
开锁和加锁时间介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般。