龙空技术网

MySQL中的锁

番茄247 26

前言:

今天朋友们对“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中引入了 意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。

行级锁

共享锁之间兼容外,其他情况排他锁全部互斥。

行锁自动添加

也就是说一个事务在某一行添加共享锁,其他事务也可以在该行添加共享锁,但不能添加排他锁。

行锁之间隙锁

标签: #mysql使用锁 #mysql锁怎么用