前言:
今天朋友们对“mysql使用锁”可能比较注意,你们都需要剖析一些“mysql使用锁”的相关文章。那么小编同时在网络上搜集了一些关于“mysql使用锁””的相关知识,希望兄弟们能喜欢,小伙伴们快快来学习一下吧!MySQL中的锁分类
锁分为三类:
全局锁表级锁行级锁全局锁
全局锁就是对整个数据库实例进行加锁,加锁之后,整个数据库将会只读,DML,DDL语句,以及事务中已经更新的操作都会阻塞。
使用场景:做全库的逻辑备份,对所有表进行锁定,从而保证数据的一致性。
加锁语句:
flush tables with read lock;
解锁语句
unlock tables;
我们来尝试一下:
首先我们来添加全局锁
接下来我们进行DML操作
解锁:
表级锁
表级锁,每次操作锁住整张表,锁定力度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM,InnoDB,BDB存储引擎中
表级锁分为三类
表锁元数据锁(MDL)意向锁表锁
它分为两类:
表共享读锁(read lock)表独占写锁(write lock)
加锁语法:
lock tables [表名] read/write
解锁语法
unlock tables /客户端断开连接
表共享读锁
绿色表示允许操作,红色表示无效操作
如果另外有一个客户端连接到该表,则只能进行读操作,不能修改。
表独占写锁
如果其他客户端此时对该表进行操作,无论是读操作还是写操作都不会生效。
元数据锁
元数据就是指的表结构。
元数据锁的加锁过程是系统自动控制的,在访问一张表的时候自动加锁。MDL的作用就是维护表结构的数据一致性,在表上有活动事务的时候,不能对表进行写入操作。为了避免DML与DDL的冲突。
SHARED_READ,SHARED_WRITE并不互斥
意向锁
为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了 意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。
行级锁
共享锁之间兼容外,其他情况排他锁全部互斥。
也就是说一个事务在某一行添加共享锁,其他事务也可以在该行添加共享锁,但不能添加排他锁。
行锁之间隙锁