mysql各种锁
根据级别分为:全局锁,表级锁,页级锁,间隙锁,临键锁,行级锁
根据锁共享策略分为:共享锁,排他锁,意向共享锁,意向排他锁
根据加锁策略分为:乐观锁,悲观锁
其他锁相关:自增锁,mdl...锁
全局锁
全局锁可以将整个数据库实例加锁:
锁住整个数据库,只允许读取数据
方法一:
mysql> flush tables with read lock; //加锁
Query OK, 0 rows...什么是幻读
假设数据库数据为:
id主键 b 索引 c
1 2 3
5 6 8
10 9 13
当启用事务时:
事务1 事务2 事务3
Q1: begin;查询 b=6的数据,for update...同时Q3是新增一条数据,无法锁住
行锁只能根据索引锁住存在的数据,如果数据不存在时,将无法锁住,就会导致出现在可重复读时却出现幻读的情况,所以mysql引入了间隙锁
间隙锁如何解决幻读
在插入数据时,mysql...都可以认为是悲观锁
自增锁
如果表存在自增字段,则mysql会额外增加一个自增锁用于控制自增数.