MYSQL8的锁机制



MYSQL8的锁机制

  • 概述
  • 从对数据操作的颗粒度分:
  • 从对数据操作的类型分:
  • 行锁
  • 表锁
  • 查看数据库是否存在锁表
  • MyISAM引擎只支持`表锁`:
  • inondb引擎支持`表锁`和`行锁`:
  • inondb引擎删改查操作自动加锁过程:


概述

MYSQL8的锁机制_mysql


相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制,下表中罗列出了各存储引擎对锁的支持情况。

MYSQL8的锁机制_数据操作_02

存储引擎

表级锁

行级锁

MyISAM

支持

不支持

InonDB

支持

支持

MEMORY

支持

不支持

BDB

支持

不支持

MYSQL8的锁机制_存储引擎_03



从对数据操作的颗粒度分:

  1. 表锁:操作时,会锁定整张表。
  2. 行锁:操作时,会锁定当前操作行。


从对数据操作的类型分:

  1. 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。
  2. 写锁(排它锁):当前操作没有完成之前,它会阻断其他写锁和读锁。


行锁

行锁:操作时,会锁定当前操作行。

MYSQL8的锁机制_数据操作_04

MYSQL8的锁机制_存储引擎_05

MYSQL8的锁机制_数据库_06



表锁

表锁:操作时,会锁定整张表。

MYSQL8的锁机制_数据库_07

MYSQL8的锁机制_数据操作_08



查看数据库是否存在锁表

// 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引擎删改查操作自动加锁过程:

默认对当前会话有效,不约束其他会话。

MYSQL8的锁机制_存储引擎_09


上一篇:MYSQL8主从复制


下一篇:深入探讨C++中的存储类