MySQL锁
锁
锁是计算机协调多个进度或线程并发访问某一资源的机制,具体内容如下:
Mysql中的锁按照颗粒度可以分为以下三类
全局锁
以下是全局锁的概述,全局锁是对整个数据库加锁加锁后数据库处于只读状态 ,后续的ddl和dml语句都将被堵塞
全局锁的语法如下
以下是全局锁的特点:
表级锁
表级锁顾名思义就是锁住整张表,表级锁可以分为表锁、元数据锁、意向锁
表锁
表锁又分为两类,分为表共享读锁和表独占写锁
读写不会阻塞其他客户端的读但是会阻塞写,写锁既会阻塞读也会阻塞写
元数据锁
元数据锁在访问一张表的时候会自动加上,进行增删改查时候会加MDL读锁,对表结构进行变更操作的时候会加MDL写锁
以下是sql语句对应自动加上的锁的类型
意向锁
以下是意向锁的概述,为了避免加的行锁与表锁冲突,引入了意向锁,使得每次加表锁的时候会先检查意向锁来判定是否可以加表锁,而不用进行每行数据的检查
以下是意向锁的分类和特点
行级锁
以下是行级锁的概述,行级锁即每次操作行数据时施加的锁,行级锁又可分为行锁、间隙锁、临键锁
行锁
行锁又被分为共享锁和排他锁,以下是概述
以下是执行不同sql语句所施加的不同的锁
对唯一索引进行检索或者等值匹配时会自动优化为行锁,不通过索引条件检索数据那么,innoDB将对表中的所有数据加锁,此时升级为表锁
间隙锁/临键锁
以下是间隙锁/临键锁的概述,即在每个数据之间的空隙当中加锁
