MySql之锁

MySql之锁

一、全局锁

对整个数据库加锁

应用:数据库所有表备份

二、表级锁

1.表锁

分为两类: 表共享读锁read lock 表独占写锁write lock

2.元数据锁
避免DML语句和DDL语句的冲突问题

3.意向锁:
作用:针对行锁和表锁,当表中有行锁时,会同时加一把意向锁,表锁不用去逐行遍历是否加了行锁,而是通过判断意向锁
的情况去决定能否加锁

意向共享锁 select 与表锁中的读锁兼容,与写锁互斥
意向排他锁 增删改 与表锁的读锁写锁都互,意向锁之间不会互斥

三、行级锁

1.行锁

锁住对应行数据,锁粒度最小,发生锁冲突概率最低,并发度最高

在RC(读已提交)、RR(可重复读)隔离级别下都支持

类型:

共享锁:和共享锁兼容,和排他锁互斥
排他锁:都互斥(增删改的行锁默认都是排他锁,读默认不加锁,使用 lock in share mode加共享锁和意向共享锁)

行锁是针对索引加的锁,字段没有索引会导致行锁升级为表锁

2.间隙锁
锁住索引记录间隙,防止其他事务在这个间隙进行insert,产生幻读
在RR隔离级别下支持

3.临键锁
行锁和间隙锁的组合,同时锁住数据及其前面所有的间隙Gap
在RR隔离级别下支持

posted @ 2023-08-05 12:40  單色不單調  阅读(16)  评论(0编辑  收藏  举报