MySQL各种锁详解

什么是锁?

1.1 锁的解释

计算机协调多个进程或线程并发访问某一资源的机制。

1.2 锁的重要性

在数据库中,除传统计算资源(CPU、RAM、I/O等)的争抢,数据也是一种供多用户共享的资源。

如何保证数据并发访问的一致性有效性,是所有数据库必须要解决的问题。

锁冲突也是影响数据库并发访问性能的一个重要因素,因此锁对数据库尤其重要。

1.3 锁的缺点

加锁是消耗资源的,锁的各种操作,包括获得锁、检测锁是否已解除、释放锁等 ,都会增加系统的开销。

1.4 简单的例子

现如今网购已经特别普遍了,比如淘宝双十一活动,当天的人流量是千万及亿级别的,但商家的库存是有限的。

系统为了保证商家的商品库存不发生超卖现象,会对商品的库存进行锁控制。当有用户正在下单某款商品最后一件时,

系统会立马对该件商品进行锁定,防止其他用户也重复下单,直到支付动作完成才会释放(支付成功则立即减库存售罄,支付失败则立即释放)。

锁的类型

表锁

种类

  • 读锁(read lock),也叫共享锁(shared lock):针对同一份数据,多个读操作可以同时进行而不会互相影响(select)。
  • 写锁(write lock),也叫排他锁(exclusive lock):当前操作没完成之前,会阻塞其它读和写操作(update、insert、delete)。

MyISAM 特点

  1.   对整张表加锁
  2.   开销小
  3.   加锁快
  4.   无死锁
  5.   锁粒度大,发生锁冲突概率大,并发性低

结论:

  •   读锁会阻塞写操作,不会阻塞读操作
  •  写锁会阻塞读和写操作

建议 :MyISAM读写锁调度是写优先,这也是MyISAM不适合做写为主表的引擎,因为写锁以后,其它线程不能做任何操作,大量的更新使查询很难得到锁,从而造成永远阻塞
 


 行锁

种类:

读锁(read lock),也叫共享锁(shared lock)

允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁

写锁(write lock),也叫排他锁(exclusive lock)

允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享锁和排他锁

意向共享锁(IS)

一个事务给一个数据行加共享锁时,必须先获得表的IS锁

意向排它锁(IX)

一个事务给一个数据行加排他锁时,必须先获得该表的IX锁

MYSQL 存储引擎默认锁 InnoDB

特点 :

  1.   对一行数据加锁
  2.   开销大
  3.   加锁慢
  4.  会出现死锁
  5.  锁粒度小,发生锁冲突概率最低,并发性高

事务并发带来的问题:

1. 更新丢失

解决:让事务变成串行操作,而不是并发的操作,即对每个事务开始---对读取记录加排他锁

2. 脏读

解决:隔离级别为Read uncommitted

3. 不可重读

解决:使用Next-Key Lock算法来避免

4. 幻读

解决:间隙锁(Gap Lock)

 

页锁

开销、加锁时间和锁粒度介于表锁和行锁之间,会出现死锁,并发处理能力一般(此锁不做多介绍)

如何上锁?

隐式上锁(默认,自动加锁自动释放

select //上读锁
insert、update、delete //上写锁


显式上锁(手动)

lock table tableName read;//读锁
lock table tableName write;//写锁

解锁(手动) 

unlock tables;//所有锁表
lock table teacher read;// 上读锁
select * from teacher; // session01可以正常读取  
select * from teacher;// session02可以正常读取
update teacher set name = 3 where id =2;//session01报错,因被上读锁不能写操作  update teacher set name = 3 where id =2;// session02被阻塞
unlock tables;// 解锁
update teacher set name = 3 where id =2;// 更新操作成功
lock table teacher write;// 上写锁
select * from teacher; // session01可以正常读取  
select * from teacher;// session02被阻塞
update teacher set name = 3 where id =2;// session01可以正常更新操作  
update teacher set name = 4 where id =2;// session02被阻塞
unlock tables;// 解锁
select * from teacher;// 读取成功
update teacher set name = 4 where id =2;// 更新操作成功

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java和Vue开发的漫画阅读软件漫画阅读小程序漫画APP

前景分析 受众广泛:漫画的受众群体广泛,不仅限于青少年,还涵盖了成年人等多个年龄层和社会阶层。漫画文化在全球范围内的影响力不断扩大,未来漫画软件创业可以考虑全球市场的拓展。 市场需求大:数字化阅读趋势下&…

LoRa无线空调计费系统都应用在哪里

中央空调计费系统由于布线方式需要消耗大量的人力及成本,LoRa在楼宇自控及智能家居中的应用越来越广泛,成为当前普遍应用的通信技术。 LoRa模块无线传输技术的不断完善,逐步解决了温控器通信方面布线困难、施工成本高的问题,促进…

4.STM32通信接口之SPI通信---硬件SPI的介绍

上一节,我们学会软件的SPI,本节,我们将学习STM32的SPI硬件收发电路,虽然STM32的硬件收发电路很强大,但是,很多我们都用不到,我们只需会最基本的就可以。硬件的好处就是稳定,功能模块…

Open AI 推出 ChatGPT Pro

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

洛谷P1030 [NOIP2001 普及组] 求先序排列(c嘎嘎)

题目链接:P1030 [NOIP2001 普及组] 求先序排列 - 洛谷 | 计算机科学教育新生态 题目难度:普及 解题思路:这道题和之前做过的一道题很像,举一反三就行 相似题目:P1827 [USACO3.4] 美国血统 American Heritage - 洛谷 |…

创意型广告如何配音梨花声音研修院退费

张弛播音5天训练营靠谱吗,在当今竞争激烈的广告市场中,创意型广告以其独特的构思和表现形式脱颖而出。而配音作为广告的重要组成部分,对于创意型广告的成功起着至关重要的作用。 在为创意型广告配音之前,首先要深入理解广告的创意…

探索 Python 应用的分层依赖:解决 UOS 环境中的 libvirt-python 安装问题

探索 Python 应用的分层依赖:解决 UOS 环境中的 libvirt-python 安装问题 背景Python 版本升级 问题描述原因分析与解决方案 Python 应用的分层依赖:安装与部署的视角libvirt-python的分层依赖尝试的解决方案 使用编译好的 .whl 文件"嫁接"整个…

SpringBoot+ENC实现密钥加密及使用原理

?? 作者: ?? 主页: https://blog.csdn.net/zhuocailing3390 ?? 社区: Java技术栈交流 ?? 主题: SpringBootENC实现密钥加密及使用原理 创作时间: 2024年06月23日 目录 前言1、整合SpringBoot 1.1、POM…

多源多汇流网络的等价转换与证明

多源多汇流网络的等价转换与证明 引言流的性质和定义推广转换方法等价性证明伪代码与C代码实现结论引言 在经典的流网络问题中,我们通常考虑的是单源单汇(即一个源节点和一个汇节点)的网络流。然而,在实际应用中,我们经常会遇到具有多个源节点和多个汇节点的情况。本文将…

如何制作“优美”PPT

目录 1.免费PPT模板网站: 2.免费有较好质量的图片网站: 免费图片资源 免费透明PNG图片资源: 免费icon图片资源: 3.选择好的图片: 图片底色 4.要与不要 千万不要: 一定要: 6.一些建议…

R中利用ggplot2绘制气泡图

闲来无事,整理了一下自己的绘图笔记,顺便分享到CSDN上。 一、介绍 气泡图(Bubble Plot)是一种常用的数据可视化方法,用于展示三个变量之间的关系。气泡图的特点是通过气泡的大小、颜色和位置来表达数据中的多维信息。…

腾讯新版滑块识别/滑块识别

最新的腾讯滑块也是进行了一小部分更新,滑块也变的非常千奇百怪。 之前写的处理图像的方法可能太粗糙,有的背景图无法识别,可以在模板匹配之前,加个图像处理。 with open(f"./img/sprite_{random_num}.png", "rb&…

Oracle系统性能监控工具oswatcher演示

1、关于 OSW OSWatcher 的使用符合 Oracle 的标准许可条款,并且不需要额外的许可即可使用!!!! OSWatcher (oswbb) 是一种 UNIX shell 脚本的集合,主要用于收集和归档操作系统和网络的度量,以便…

PowerShell install 一键部署postgres17

postgres 前言 PostgreSQL 是一个功能强大的开源对象关系数据库系统,拥有超过 35 年的积极开发经验 这为其赢得了可靠性、功能稳健性和性能的良好声誉。 通过官方文档可以找到大量描述如何安装和使用 PostgreSQL 的信息。 开源社区提供了许多有用的地方来熟悉PostgreSQL, 了…

Elasticsearch vs 向量数据库:寻找最佳混合检索方案

图片来自Shutterstock上的Bakhtiar Zein 多年来,以Elasticsearch为代表的基于全文检索的搜索方案,一直是搜索和推荐引擎等信息检索系统的默认选择。但传统的全文搜索只能提供基于关键字匹配的精确结果,例如找到包含特殊名词“Python3.9”的文…

【Qt在线安装器】不能下载Qt5

qt在线下载不显示以前的版本时: 勾选”Archive“,点击”筛选“ 然后就会显示出QT5的版本, 按流程下载即可

【Unity高级】如何获取着色器(Shader)的关键词

在动态设置Shader时,会需要通过EnableKeyword, DisableKeyword来完成。但一个Shader有哪些关键词呢?Unity的文档中并没有列出来,但我们可以通过遍历Shader的KeywordSpace来查看。 1. 代码如下 using UnityEngine;public class KeywordExamp…

1.1 Beginner Level学习之“使用 rosed 在 ROS 中编辑文件”(第九节)

学习大纲: 1. 使用 rosed rosed 是 ROS 自带的 Rosbash Suite 的一部分,它的目的是让你通过 ROS 包的名称快速编辑文件,而不用手动输入完整的路径,节省开发时间。 基本用法:$ rosed [package_name] [filename] 示例…

MySQL语句学习第三篇_数据库

MySQL语句学习第三篇_数据库 专栏记录MySQL的学习,感谢大家观看。 本章的专栏📚➡️MySQL语法学习 本博客前一章节指向➡️MySQL语句学习第二篇 本人的博客➡️:如烟花般绚烂却又稍纵即逝的主页 文章目录 MySQL的基础操作(改与查&#xff0…

HCIA-openGauss_2_2连接与认证

设置客户端认证策略 设置配置文件参数 gssql客户端连接-确定连接信息 客户端工具通过数据库主节点连接数据库,因此连接前,需要获取数据库主节点的在服务器的IP地址及数据库主节点的端口号信息。 步骤1:以操作系统用户omm登录数据库主节点。…