MySQL高级-锁机制
一、概述
1、定义
2、锁的分类
①从对数据操作的类型(读\写)分
读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。
写锁(排它锁):当前写操作没有完成前,它会阻断其他写锁和读锁。
②从对数据操作的粒度分
表锁
行锁
二、三锁
1、表锁(偏读)
特点:偏向MyISM存储引擎,开销小,加锁块;无死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
案例分析:
建表:
手动增加表锁:
手动释放表:
unlock tables;
查看表状态命令:
show open tables;
过程:
结论:
表锁分析:
2、行锁(偏写)
特点:
偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率最低,并发度最高。
InnoDB与MyISAM最大不不同有两点,一是支持事务,二是采用了行级锁。
由于行锁支持事物:
事务(Transaction)及其ACID属性:
并发事务处理带来的问题:
更新丢失(Lost Update):
脏读(Dirty Reads):
不可重复读(Non-Repeatable):
幻读(Phantom Reads):
事务的隔离级别:
间隙锁:
如何锁定一行:
结论:
行锁总结:
优化建议:
3、页锁