MySQL的锁(简单入门)

news/2024/4/17 6:27:14

文章目录

  • 前言
  • 全局锁
  • 表级锁
  • 行级锁
  • 总结


前言

今天来讲一讲 MySQL 的锁,一个简单的入门。

MySQL 锁,分为全局锁,表级锁,行级锁,三个锁按照名字的颗粒度来算是越来越小的。锁越大性能越差,InnoDB 默认的是行级锁,而 MyLSAM 默认的是表级锁,这也是 MySQL 现在使用 InnoDB 的原因之一。


全局锁

当使用全局锁的时候,整个数据库都会被锁着。只能进行读的操作。
像这两种操作都会被堵塞:

  • 对数据的增删改:insert,delete,update 等语句。
  • 对表结构的修改:alter table、drop table 等语句。

为什么时候需要使用全局锁呢?

  • 全库逻辑备份。

当我们使用备份的时候可以加入全局锁,这样子的话我们的数据在备份的时候就不会出现修改。
但是呢?这个备份的期间是比较长的,这会影响到业务,导致业务的停滞。

有解决方法!!!
如果,数据库引擎是支持可重复读的隔离级别。那么在备份数据库之前开启事务,那么就会先创建 Read View。MVCC 机制的帮助下,其他事务也可以更新数据,但是不会影响备份数据的 ReadView。这样就可以备份数据的同时不会影响到业务的执行。

表级锁

MyLSAM 支持的表级锁。

  • 给表加上读锁也就是共享锁。
  • 给表加上写锁也就是独占锁。

元数据锁(DML)

  • 当对一张表进行 CRUD 操作时,加的是 MDL 读锁。
  • 当对一张表的结构变更的时候,加的是 MDL 写锁。

意向锁

  • Innodb 在表对某些记录加上共享锁之前,都会先在表级别上加上一个意向共享锁。
  • Innodb 在表对某些记录加上独占锁之前,都会先在表级别上加上一个意向独占锁。

意向锁的目的是为了快速判断表里是否有记录被加锁。

AUTO-INC 锁

行级锁

InnoDB 引擎是支持行级锁的,而 MyISAM 引擎并不支持行级锁。


总结

MySQL 锁,分为全局锁,表级锁,行级锁,三个锁按照名字的颗粒度来算是越来越小的。锁越大性能越差,InnoDB 默认的是行级锁,而 MyLSAM 默认的是表级锁,这也是 MySQL 现在使用 InnoDB 的原因之一。

对锁的概念即使看了多篇文章还是存在疑惑,知识不过脑,往后会接着完善。


有启发点个赞 🌹

好文章不要错过,最近給大家分享的文章

MySQL的基础知识

1.MySQL的基础架构
2.SQL语句的执行流程
3.MySQL 的存储引擎

MySQL 索引

1.MySQL索引入门(一文搞定)
2.MySQL索引面试题(高频)

MySQL 事务
1.MySQL事务(基础入门)(高频考点)
2.MySQL事务的隔离级别(高频面试题)
3.事务的MVCC机制

预计下篇分享:MySQL 日志

本篇参考:小林coding

我是小辉,正在进行 Java 实习的 24 届应届毕业生。欢迎关注,持续分享,包括但不限于技术文章。全网同名…


https://www.xjx100.cn/news/3293495.html

相关文章

进程的通信以及信号的学习

一,进程的通信: 种类:1.管道 2.信号 3.消息队列 4.共享内存 5.信号灯 6.套接字 1.管道: 1.无名管道 无名管道只能用于具有亲缘关系的进程间通信 pipe int pipe(int pipefd[2]); 功能: 创建一个无名管道 …

中文文本分类(pytorch 实现)

import torch import torch.nn as nn import torchvision from torchvision import transforms, datasets import os, PIL, pathlib, warningswarnings.filterwarnings("ignore") # 忽略警告信息# win10系统 device torch.device("cuda" if torch.cuda.i…

Socks5代理与代理IP的应用

在全球化的背景下,跨界电商和游戏行业正经历着蓬勃发展的时代。然而,随之而来的网络安全挑战也日益突出。为了应对这些挑战,Socks5代理与代理IP等技术成为了保障网络安全的重要工具。本文将探讨这些技术在跨界电商和游戏行业中的应用&#xf…

成人年龄判断(个人学习笔记黑马学习)

结合前面学习的input输入语句,完成如下案例: 1.通过input语句,获取键盘输入,为变量age赋值。(注意转换成数字类型) 2.通过if判断是否是成年人,满足条件则输出提示信息,如下: 欢迎来到黑马儿童游乐场&#x…

Qt开发 入门

Qt开发 入门 Qt Hello World程序 使用"按钮”实现 纯代码方式实现 (1)创建工程 剩下的直接下一步即可 (2)编写代码,widget.cpp #include "widget.h" #include "ui_widget.h"#include &…

幻兽帕鲁(Palworld 1.4.11.5.0)私有服务器搭建(docker版)

文章目录 说明客户端安装服务器部署1Panel安装和配置docker服务初始化设置设置开机自启动设置镜像加速 游戏服务端部署游戏服务端参数可视化配置 Palworld连接服务器问题总结 服务端升级(1.5.0) 说明 服务器硬件要求:Linux系统/Window系统&a…

UKP3d导出管道应力分析文件.psa,.cii文件的编号一致

今天,用户反馈:用户用UKP3d9.2.2,UKP3d导出的管道应力分析文件.CII文件的支吊架编号与UKP3d 支吊架编号不一致。如图: 过程:从UKP3d导出cii 中间文件后,再用CII软件转化为C2文件,再对比在UKP3d和…

敏捷中的左移测试:原因和最佳实践

在应用程序开发中,当今最受争议的话题之一是手动测试与自动化测试。即使在技术职业道路上,手动测试人员也面临着转向自动化测试的巨大压力。 虽然需要找出手动测试与自动化测试争论的解决方案变得越来越重要,但了解典型手动质量保证测试人员…