• 【mysql学习笔记30】锁(非教程)


    分类

    • 全局锁:锁住一个库
    • 表级锁:锁住一张表
    • 行级锁:锁住一行记录

    全局锁

    全局锁是对整个数据库进行加锁,锁住以后整个数据库将处于只读状态,其余操作均会阻塞。
    应用场景就是一致性数据库备份时需要加全局锁,防止备份过程中数据变动。

    使用全局锁

    flush tables with read lock;

    mysql备份命令

    mysqldump -u root -p 1234 db_name>backup.sql

    表级锁

    分类

    • 表锁(又分为read lock和write lock)
    • 元数据锁(meta data lock,MDL)
    • 意向锁

    元数据锁

    简介
    元数据锁是有mysql系统自行控制的,我们无需显示使用。元数据锁主要是用来维护元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作。
    理解
    元数据可以理解为一张表的结构信息,当一张表上有活动事务的时候,元数据锁会被自动加上,防止操作数据途中表结构被修改导致各种意外情况。
    加锁时机
    当对一张表进行增删改查的时候,加MDL读锁。
    当对一张表结构进行变更操作的时候,加MDL写锁。

    加表锁

    lock tables 表名 read;
    一旦加了读锁,所有连接包括自己都不能写,只能读
    lock tables 表名 write;
    一旦加了写锁,加锁的连接可以读和写,其它连接既不能读也不能写

    解锁

    unlock tables;

    意向锁

    介绍
    通过加意向锁,另一个线程在加表锁的时候就不需要遍历所有行来判断是否能加锁,提高了效率。
    分类
    意向共享锁:由语句select … lock in share mode添加,与表锁共享锁兼容,与排他锁互斥
    意向排他锁:由insert、update、delete、select … for update添加,与表锁共享锁以及排他锁都互斥

    行级锁

    介绍

    行级锁,每次操作锁住对应行数据。锁定力度最小,发成锁冲突的概率最低,并发度最高。应用在InnoDB存储引擎中。
    InnoDB的数据是基于索引组织的,行锁通过对索引上的索引项加锁来实现,而不是对记录加锁

    分类

    • 行锁:锁定单个行记录,防止其它事务对此进行update和delete。
    • 间隙锁:锁定索引记录间隙(不包含该记录),确保索引记录间隙不变,防止其他事务在这个间隙进行insert,产生欢度。
    • 临键锁:是行锁和间隙锁的组合,相当于闭区间的间隙锁

    行锁

    • 共享锁:允许其他事务读
    • 排他锁:禁止其他事务读写

    在这里插入图片描述
    ps:如果增删改的条件没有覆盖索引,那么Innodb会对所有记录加锁,就升级为了表锁

    间隙锁/临键锁

    在这里插入图片描述

  • 相关阅读:
    接口自动化入门:Requests请求头设置详解!
    TopK问题详解
    基于模板匹配的手写字体数字识别-含Matlab代码
    图像处理之图像噪声和各种噪声的matlab实现
    在soc与mcu发送视频数据的过程中如何保证PTS的一致性和准确性
    自动编码器简单理解及简单使用描述
    有没有看下concat函数这个符号报错问题?应该是网站自己的问题?
    树莓派开机教程
    什么是自动化测试框架?我们该如何搭建自动化测试框架?
    一文读懂Js中的this指向
  • 原文地址:https://blog.csdn.net/qq_31618549/article/details/125554716