当前位置: 首页 > news >正文

MySQL中常见的锁

目录

前言

关于 锁的概述

锁的分类

锁的应用场景

锁使用

全局锁

表级锁

​行级锁

前言

本篇博客,旨在介绍 全局锁和 表级锁,行级锁


关于 锁的概述

锁的分类

在MySQL数据库中,我们根据

锁的颗粒度的大小分为:全局锁,表级锁,行级锁。

锁的功能分为:读锁(共享锁),写锁(排斥锁)


锁的应用场景

总结:多个事务在进行并发操作时,保证数据的真实性,有效性。

锁使用

全局锁

全局锁范围最大,如果加了全局锁,就处于只读状态。表示你无法向任意数据库中的任意一张表插入,修改数据
其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性。

从图中,可知,加了全局锁后,只允许查询操作

语法--添加全局锁

flush tables with read lock;

语法--去掉全局锁

unlock tables;

导出数据

//mysqldump -uroot -p123456 test > D:/tb.sql
mysqldump  -uroot-p密码 数据库名> 文件名.sql

案例

我现在打开两个mysql客户端模拟,两个事务的执行。左边一个事务加上全局锁;右边一个不加,对某张表进行查询或修改操作

  • 可以发现,加了全局锁之后,右侧只允许查询数据,不允许修改或新增

  • 去掉全局锁,就可以添加或修改数据

总结
数据库中加全局锁,是一个比较重的操作,存在以下问题:
1.如果在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆。
2.如果在从库上备份,那么在备份期间从库不能执行主库同步过来的二进制日志(binlog),会导致主从延迟。

解决办法
在InnoDB引擎中,我们可以在备份时加上参数--single-transaction参数来完成不加锁的一致性数据备份

mysqldump --single-transaction -uroot-p123456 itcast> itcast.sql


表级锁

表级锁,每次操作锁住的是整张表

表级锁的分类:表锁,元数据锁,意向锁

表锁:1. 表共享读锁(readlock)2.表独占写锁(write lock)

语法

//加锁
lock tables 表名 read/write。
//释放锁
unlock tables//或者关掉当前窗口,也会关闭

总结

1 如果你加了读锁,表示关于任何查询操作都可以正常进行,但修改/添加将被阻塞

  • 绿色,可以执行的,红色,执行会阻塞

案例

在当前客户端中添加了共享读锁,但依旧可以进行读取操作,但是其他行为会被阻止

打开另外一个mysql客户端,发现即使添加了共享读锁,但依旧可以进行读取操作,但更新会被阻止,只有当把锁释放才行

共享读锁被释放,就可以执行更新操作

2 如果你加了写锁,只允许当前事务,进行读写操作,其他事务的任何操作会被阻塞

案例

给自身表加了写锁,观察 是否可以进行查询,修改操作

发现自身事务,不受影响,依旧可以进行读写操作,但其他事务会阻塞


行级锁

InnoDB实现了以下两种类型的行锁:
1.共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排它锁。
2.排他锁(X):允许获取排他锁的事务更新数据,阻止其他事务获得相同数据集的共享锁和排他锁。

关于常见的sql语句,中添加的锁有:

默认情况下,InnoDB在REPEATABLEREAD事务隔离级别运行,InnoDB使用next-key【临键锁】锁进行搜索和索引扫描,以防止幻读。

行级锁的应用

可以通过以下SQL,查看意向锁及行锁的加锁情况:
 

select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_locks;


1.针对唯一索引进行检索时,对已存在的记录进行等值匹配时,将会自动优化为行锁。

翻译这句话是:如果当前操作中主键索引【id】作为条件进行等值匹配,自动变换为行级锁

案例


2.InnoDB的行锁是针对于索引加的锁,不通过索引条件检索数据,那么InnoDB将对表中的所有记录加锁,此时就会升级为表锁。

http://www.dtcms.com/a/503944.html

相关文章:

  • 浙江杭州seo网站建设网站优化在微信上做网站
  • 招商网站平网站平台地方购物网站盈利模式
  • 网站建设培训心得南京紫米网络科技有限公司
  • 【C++基本功】C++适合做什么,哪些领域适合哪些领域不适合?
  • 怎么做酒店网站网页设计教程ppt
  • 深圳宝安美容医院网站建设想学网站建设优化去哪
  • 分布式组件【ZooKeeper】
  • 基于windows 11 的python编译开发环境部署
  • 建设银行江苏分行网站最新消息今天的新闻
  • STM32G474单片机开发入门(十七)DAC详解及输出电压和正弦波实战
  • 免费做二维码网站网站内容设计遵循的原则有
  • 一家专门做原产地的网站wordpress产品图片框
  • Annual Comedy Competition (Season 1)
  • 网站开发json解析大连seo代理计费
  • 网站失败后怎么重新建设创建全国文明城市简报
  • LLMs-from-scratch(第4章:从零开始实现GPT模型以生成文本)
  • 密钥管理:AWS KMS信封加密,数据密钥轮换?
  • 单独复习一下 BCD码 和 余3码 的关系
  • 1. Qt 基础
  • 网站专题策划方案书直播app开发教程
  • Process Monitor 学习笔记(5.15):三大经典实战(文件被占用 / 启动慢 / 权限失败)与标准排错流程
  • 福建省晋江市建设局网站想学python从哪里入手
  • 做网站的语言叫什么多个wordpress
  • 建网站要多少钱 优帮云百度上找不到网站
  • 泰兴做网站的公司搜狐快站建站
  • 手机网站模板下载免费.net 网站模板 下载
  • 设备健康管理大数据平台:工业智能化的核心数据引擎​
  • T247867 05-06-D03-海狸咬树(选做)(L5)
  • JAVA 架构师面试题含答案:JVM+spring+ 分布式 + 并发编程
  • 19.6 《3步攻克语音输入提示工程:智能纠错+多模态融合实战全解》