MYSQL8的锁机制
- 概述
- 从对数据操作的颗粒度分:
- 从对数据操作的类型分:
- 行锁
- 表锁
- 查看数据库是否存在锁表
- MyISAM引擎只支持`表锁`:
- inondb引擎支持`表锁`和`行锁`:
- inondb引擎删改查操作自动加锁过程:
概述
相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制,下表中罗列出了各存储引擎对锁的支持情况。
存储引擎 |
表级锁 |
行级锁 |
MyISAM |
支持 |
不支持 |
InonDB |
支持 |
支持 |
MEMORY |
支持 |
不支持 |
BDB |
支持 |
不支持 |
从对数据操作的颗粒度分:
- 表锁:操作时,会锁定整张表。
- 行锁:操作时,会锁定当前操作行。
从对数据操作的类型分:
- 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。
- 写锁(排它锁):当前操作没有完成之前,它会阻断其他写锁和读锁。
行锁
行锁:操作时,会锁定当前操作行。
表锁
表锁:操作时,会锁定整张表。
查看数据库是否存在锁表
// show OPEN TABLES: 这部分命令用于显示当前 MySQL 数据库中所有打开的表。
// where In_use > 0: 这是条件限制,表示只显示那些当前正在被使用的表。
// In_use 列表示有多少个线程正在使用这张表。
show OPEN TABLES where In_use > 0;
// 显示当前正在执行的所有 SQL 语句,可以查看哪些线程正在使用哪些表
SHOW PROCESSLIST
// 显示 InnoDB 引擎的事务信息,可以查看哪些事务正在持有锁
INFORMATION_SCHEMA.INNODB_TRX
MyISAM引擎只支持表锁
:
- 对表设读锁之后,不能写表,不能再读别的表。
- 对表设写锁后,在没释放表写锁前,,读该表会挂起。—写锁是独享锁,表写锁只能加一个
inondb引擎支持表锁
和行锁
:
- 删改查操作,inondb会自动加排他锁
- 对行加锁后,修改行的过程中无法对该行写操作
- 不影响其他行写入
- 不影响读
inondb引擎删改查操作自动加锁过程:
锁
默认对当前会话有效,不约束其他会话。