Mysql中有那些锁

按照锁的力度分:

1.行级锁

2.表级锁

3.全局锁

4.页级锁

innodb不支持页锁

全局锁

全局锁指的是对整个数据库实例加锁,一般用于数据库的

表级锁

表锁 是对整张表进行加锁。

表级锁还有以下几种:

意向锁:

意向锁是指,我们在事务请求表/行的意向锁的时候,我们会对整个表加上意向锁。

意向锁解决了一个问题:

就是我们一个事务对行加上锁的时候,另一个事务对表加上锁。这种情况似乎可以发生,但是事务已经对行上锁了,另外的一个事务也可以访问并操作该表内的所有行,这就发生冲突了。

意向共享锁:

多个事务可以同时加上共享锁,但是不能修改

意向排他锁:

表级锁,多个事务可以对该表上面的数据进行修改

AUTO-INC锁

AUTO-INC 锁是一种特殊的表级锁,由插入带有 AUTO_INCREMENT 列的表的事务获取。在最简单的情况下,如果一个事务正在向表中插入值,任何其他事务都必须等待,以便执行它们自己的插入操作,这样第一个事务插入的行就会接收到连续的主键值。

字典锁

字典锁,英文名叫做MetaData Lock,也叫做MDL锁,它是一种用于管理元数据的锁机制,而不是数据本身的锁。

MDL锁用于控制对数据库对象的元数据的并发访问,数据库会在执行DDL(Data Defination Language)操作时加上字典锁。字典锁的主要目的是保护数据库中的元数据对象,如表、列、索引、视图等,以确保在DDL操作期间,不会出现数据一致性问题和竞争条件。

表级排他&共享锁

InnoDB中,一般我们会做的就是两种操作,即DDL和DML。

DML中。我们日常的对数据库表结构的SELECT、INSERT、UPDATE以及DELETE都不会添加表级别的共享锁及排他锁。而是使用默认的并发控制方式——行级锁。

那除了增删改查以外,还有一些其他的操作,比如ALTER、DROP等对表机构改变的动作,他们加锁的过程添加的是MDL锁,即字典锁。

所以,**InnoDB中的表级锁并不是没用,而是因为他划分的太细了,意向锁、AUTO-INC锁、字典锁等。而剩下的普通的排他锁和共享锁,确认很少才能用得上。**我找了很多资料,也没有明确的看到具体是啥时候,在《MySQL是怎样运行的》这本书中提到过一句:比如在崩溃恢复时。

当然,我们可以自己通过SQL语句来添加表级锁。可以使用 LOCK TABLES 手动添加表级锁,但这会阻塞其他所有访问该表的操作,直到执行 UNLOCK TABLES

LOCK TABLES还可以分为排他和共享:

LOCK TABLES table READ:这就是添加表级别的共享锁

LOCK TABLES table WRITE:这就是添加表级别的排他锁

还有就是,Innodb会在倾向于选择行级锁来进行并发控制,但是如果在一些极端情况下, 比如说UPDATE操作需要扫描整个表且对表中许多行进行更新,InnoDB可能会评估行级锁的成本过高,而采用更粗粒度的锁定策略,比如表级锁。然而,这种情况在InnoDB中是非常罕见的,因为InnoDB设计上是倾向于尽可能地使用行级锁。

扩展知识

update时没有用到索引,加什么锁?

相信大家看到过的很多资料中都有过类似的描述“innodb 的 update语句中,如果where条件中没有索引,就不是行级锁了,而是锁表了,就是表级锁”。

我一直也都有这个印象,最开始是从哪看来的,也无从考究了,确实很长一段时间都是这么认为的。但是我发现并不对。

确实,mysql的行级锁锁的是索引,但是当update语句的where条件中没有用到索引的话,他会做全表扫描,但是也不是全部都锁定。而是把符合条件的记录锁住。

锁啥呢?锁主键索引。没有主键呢?会自动创建隐式主键锁住。


以上部分知识来源于网络

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/100255.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/100255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 CoT 思维链协调多 MCP 工具:依托亚马逊云科技服务打造全流程智能的 Amazon Redshift 运维体系

基于 CoT 思维链协调多 MCP 工具:依托亚马逊云科技服务打造全流程智能的 Amazon Redshift 运维体系 新用户可获得高达 200 美元的服务抵扣金 亚马逊云科技新用户可以免费使用亚马逊云科技免费套餐(Amazon Free Tier)。注册即可获得 100 美元的…

手机群控平台的智能管控技术深度解析

手机群控平台作为数字化运营的核心工具,正在重塑移动设备管理的技术边界。其核心价值在于通过集中化控制实现批量化操作,同时借助智能化算法提升管控效率。本文将深入探讨其技术架构与实现方案。平台架构与核心技术手机群控平台采用分布式架构设计&#…

Spring Boot 生命周期与核心扩展点全解析(含实操案例)

在Spring Boot开发中,理解应用的生命周期是实现优雅启动、资源管理与故障处理的关键。不同于传统Spring框架需要繁琐的XML配置,Spring Boot通过自动配置简化了开发流程,但其生命周期的底层逻辑仍延续并增强了Spring的核心机制。本文将从“生命周期阶段划分”“核心扩展点原理…

69-SQLite应用

1. SQLite操作 1.1了解数据库1.2 操作数据库步骤# -*- coding: utf-8 -*- """ Project : 01-python-learn File : 03_SQLite3添加数据.py IDE : PyCharm Author : 刘庆东 Date : 2025/9/15 14:05 """ # 1. 导入模块 import sqlite3 …

Nginx - 正向vs反向代理

参考: https://blog.csdn.net/william_n/article/details/127387009 AI问答​​ Nginx 正向代理 vs 反向代理详解​​ ​​1. 正向代理(Forward Proxy)​​ ​​定义​​ ​​客户端主动配置​​的代理服务器,代表客户端向外部服务器发送请…

装饰器模式在Spring中的案例

设计模式-装饰器模式 装饰器模式所解决的问题是,在不改变原来方法代码的情况下对方法进行修饰,从而丰富方法功能。 Spring架构中的装饰器模式 在Spring架构中,以线程池进行举例。 线程池 线程池是一个对线程集中管理的对象,集中管…

云原生与 AI 驱动下的数据工程新图景——解读 DZone 2025 数据工程趋势报告【附报告下载】

在 AI 技术从“实验性”走向“企业级落地”的关键阶段,数据工程作为底层支撑的重要性愈发凸显。近日,DZone 发布的《2025 数据工程趋势报告》(Scaling Intelligence with the Modern Data Stack)通过对全球 123 位 IT 专业人士的调…

9.5 机器翻译与数据集

语言模型是自然语言处理的关键,而机器翻译是语言模型最成功的基准测试,因为机器翻译正是将输入序列转换成输出序列的序列转换模型的核心问题。序列转码模型在各类现代人工智能应用中国呢发挥着至关重要的作用,因此我们将其作为本章剩余部分和…

Linux 内核镜像与启动组件全解析:从 vmlinux 到 extlinux.conf

🧠 Linux 内核镜像与启动组件全解析:从 vmlinux 到 extlinux.conf 在嵌入式 Linux 系统中,启动流程涉及多个关键文件和机制。不同的镜像格式和配置文件承担着不同的职责,从内核编译到 bootloader 加载,再到系统启动。本…

【系统分析师】2024年下半年真题:论文及解题思路

更多内容请见: 备考系统分析师-专栏介绍和目录 文章目录 试题一:论devops在企业信息系统开发中的应用 试题二:论系统业务流程分析方法及应用 试题三:论软件测试方法及应用 试题四:论信息系统运维管理 试题一:论devops在企业信息系统开发中的应用 1、概要叙述你参与管理和…

AI GEO 实战:借百度文小言优化,让企业名称成搜索热词

在当今数字化浪潮中,企业的线上曝光度和搜索可见性至关重要。百度作为国内占据主导地位的搜索引擎,其推出的大模型文小言蕴含着巨大的潜力。通过巧妙运用 AI GEO(生成式引擎优化)策略,企业完全有可能让自己的公司名称成…

文件操作知识点总结

目录 1.为什么使用文件 2.什么是文件? 2.1 程序文件 2.2 数据文件 2.3 文件名 3.二进制文件和文本文件 4.文件的打开和关闭 4.1 流和标准流 4.1.1 流 4.1.2 标准流 4.2 文件指针 4.3 文件的打开和关闭 4.3.1 fopen函数 4.3.2 fclose函数 5.文件的顺序…

oracle认证有哪几种?如何选择

Oracle(甲骨文)不仅是全球领先的数据库软件巨头,更是企业级数据管理的代名词,获得Oracle认证,证明可从事Oracle数据库服务器的数据操作和管理等工作。下面给大家详细其主要认证类型及其在职业发展中的含金量&#xff0…

AppTest邀请测试测试流程

相比AppGallery邀请测试,AppTest邀请测试具备以下全新能力:若您同时发布了多个测试版本,AppTest支持测试版本自动升级到最新的测试版本。您可以选择将当前最新在架版本的应用介绍截图展示给测试人员,视觉效果更好,提升…

硬件 - oring多电源切换

目录 一、ORing电路 1.1 ORING 电路 1.2 ORING 电路关键部分 二、多电源切换 2.1 主要思路 2.2 适用场景 一、ORing电路 1.1 ORING 电路 中文常称 “或环电路” 或 “并联冗余电路”是一种电源并联冗余拓扑结构 核心功能:将多路独立电源的输出 “并联整合”&a…

Qt多语言翻译实战指南:常见陷阱与动态切换解决方案

问题背景 在Qt项目国际化过程中,开发者经常会遇到各种翻译逻辑问题,特别是需要实现运行时语言动态切换功能时。一个典型场景是:程序默认英文显示,加载中文翻译文件后界面变为中文,但再次切换回英文时却失败。本文将深入…

机器人要增加力矩要有那些条件和增加什么

机器人要增加力矩要有那些条件和增加什么进行详细讲解 好的,这是一个非常专业且重要的问题。为机器人增加力矩(通常指提升关节输出扭矩)不是一个简单的部件替换,而是一个涉及动力链、结构、控制和散热的系统性工程。 以下将详细讲…

spring集成aes加密、rsa加密

文章目录spring集成对称加密spring集成rsa加密spring集成对称加密 encrypt:key: aaabbb # 只配置这个参数就实现了对称加密salt: 333444 # 这个可以不配置spring集成rsa加密 例如apollo,如果没有配置encrypt.key,那么apollo不配置应该也是可以的&#…

OpenSTL PredRNNv2 模型复现与自定义数据集训练

OpenSTL PredRNNv2 模型复现与自定义数据集训练 概述 本文将详细介绍如何复现 OpenSTL 中的 PredRNNv2 模型,并使用自定义的 NPY 格式数据集进行训练和预测。我们将从环境配置开始,逐步讲解数据预处理、模型构建、训练过程和预测实现,最终实现…

Linux内核IPv4隧道模式封装机制剖析

概述 在Linux网络栈中,XFRM(Transform)子系统负责实现IPsec等安全协议的功能。其中,xfrm4_mode_tunnel.c是实现IPv4隧道模式封装的核心模块,为IPv4数据包提供隧道模式的封装和解封装能力。本文将深入分析这一模块的实现机制。 模块架构与功能 该模块通过注册到XFRM框架…