1、特定:
偏向MyISAM存储,开销小,加锁快,无死锁,锁粒度大,发送锁冲突的概率最高,并发最低。
2、加读写锁
可以手动增加表锁locktable表名read(write),表名2read(write)
查看表上加过的锁 showopentables。 in_use列是1表示加锁
加读锁
加写锁
3、案例结论
4、表锁分析
查看那些表被加锁了 showopentables;
如何分析表锁定:
可以通过检查table_locks_waited和table_locks_immediate状态来分析表锁定
行锁
特点:
Innodeb存储,开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率低,并发度也不高。与myisam最大的不同有两点:一是支持事务。行锁支持事务(事务知识复习)
案例分析
行锁演示
索引失效行锁升级为表锁
如表中b字段是varcher类型的索引,where中根据b搜索么有加引号,索引失效,会使行锁变位表锁
间隙所危害
【危害】
因为Query执行过程中通过范围查找的话,它会锁定这个范围内的所有索引键值,即使这个键值不存在,间隙锁在这个范围 内的数据不存在的是无辜的也会被锁定,可能位有很大危害。
如何锁定一行
select*fromtableNamewherea=1forupdate
forupdate锁住一行数据后其他操作会被阻塞,直到锁定行被提交commit
总结
innodb存储引擎由于实现了行级锁定,虽然在锁定机制的实现方面带来的性能损耗可能比表锁更高点,但是在整体并发数据方面更好
行锁分析
优化建议