全局锁:
表级锁:
表锁:
读锁,加锁后允许其他事务读数据,但不能写
写锁,加锁后不允许其他事务读写数据。
元数据锁:
在进行数据操作时自动加锁,读数据加上共享读锁,写数据加上共享写锁,这 两类锁兼容,事务并发可以读写。更改表结构会加上排他锁,不兼容。事务并发不能让更改表结构
意向锁:
在读写某行数据时会自动加上行锁,另一个事务想要对整个表加表锁时需要逐行 检查是否有行锁,效率低下。所以引进了意向锁,直接检查意向锁(是否兼容)看是否 能对表加锁。意向锁分为意向共享锁(读)和意向排他锁(更新操作自动添加),共享锁对表读锁兼容,排他锁 两个都不兼容。意向锁之间不互斥。
行级锁:
锁的粒度小,并发度高,行锁是通过索引上的索引项加锁实现的,而不是对记 录加的锁。
行锁:
锁住单个行记录,防止其他事务进行更新操作。提交读和可重复读隔离级别都支持,针对唯一索引检索时,对已存在的记录进行等值匹配时,间隙锁将自动优化为行锁,不通过索引条件检索数据,那么innodb会对表中的所有记录加锁,升级为表锁。
共享锁:
可以并发事务读数据,可以多次获取共享锁,但不能获取排 他锁,防止其他事务获得排他锁
排他锁:允许排他锁的事务更新数据,阻止其他事务读写,更改行数 据自动加
间隙锁:
锁定索引记录间隙,确保索引记录间隙不变,防止间隙插入数据,产 生幻读,在可重复读隔离级别下支持
索引等值查询唯一索引,给不存在的记录枷锁会优化为间隙锁,锁住相邻之间的间隙
范围查询唯一索引,会访问到第一个不满足条件的值,加上临键锁
普通索引等值查询,将锁住该行及相邻行之间的间隙
临键锁:
行锁和间隙锁的组合,同时锁住数据和数据之间的间隙。