• 【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会对所有记录加锁,就升级为了表锁

    间隙锁/临键锁

    在这里插入图片描述

  • 相关阅读:
    SpringBoot自定义注解+异步+观察者模式实现业务日志保存
    E-Payment Integrator Delphi Edition
    FFmpeg开发笔记(二十二)FFmpeg中SAR与DAR的显示宽高比
    根据PromiseA+规范从零实现Promise【这一次,带你彻底搞懂Promise使用和原理】
    SpringBoot高频面试题
    mysql的分库分表
    特征选择-sklearn
    HTML+CSS+JS——动漫风二次元论坛(2页) HTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作
    变频器调试工具:ABB Drive Composer
    各种业务场景调用API代理的API接口教程
  • 原文地址:https://blog.csdn.net/qq_31618549/article/details/125554716