MySQL基础之锁

基本概念
锁是一种协调多个事务对同一数据并发访问的一种机制。它确保了数据库的一致性和完整性,防止多个事务同时修改一份数据导致冲突。

锁的类型
锁分为全局锁、表级锁、行级锁。全局锁会锁定整个数据库实例,使其处于只读状态;表级锁会在执行操作时锁定整张表;行级锁会锁住相关行的数据。注意!表级锁、行级锁不一定会让对应的表或者数据行处于只读状态,这得取决于锁的模式。
锁的模式
锁具有排他锁、共享锁两种模式。共享锁:允许多个事务同时读取数据,是数据库管理系统实现并发控制的一种机制,但是数据被读取期间,事务不能对数据进行修改,这种锁通常用于实现事务的可重复读(repeatable read)隔离级别。确保一个事务可以多次读取到同样的数据而不被其它事务的修改所影响;排他锁:当前事务仍具有该表的增删改查权限,其它事务将无法对该表进行增删改查操作。这种锁通常用于写操作,确保数据的一致性和完整性。
锁的创建与释放
创建一个全局锁:flush tables with read lock;在对应的数据库执行该命令之后,该库下所有的表都会处于只读模式,无法修改、删除数据。解除全局锁:unlock tables;通常在数据库整库维护的时候,会使用该锁。

创建一个表级锁,表级锁创建有共享锁、排他锁两种模式。创建一个表级的共享锁:lock tables table_name read;创建共享锁之后,在当前事务中可以对表数据进行查询操作,但不能进行增删改操作;其他事务也能进行查询操作,但不能进行增删改操作;创建一个表级排他锁:lock tables table_name write;在当前事务创建一个排他锁之后,当前事务仍具有该表的增删改查权限,其它事务将无法对该表进行增删改查操作,必须等待当前事务完成并且锁被释放,其它事务才能对该表进行增删改查。(当前会话可以开启多个事务,如果当前会话不开启事务,会隐式的开启事务,会话不变,所有的操作均在当前事务进行)释放表级锁:unlock tables;

创建一个行级锁,行级锁的创建也分为共享锁、排他锁两种模式。创建一个行级共享锁:select * from table_name where cloum_name = "xxx" lock in share mode;创建完成之后,只允许当前事务以及其它事务读取该行的信息,不允许修改;创建一个行级排他锁:select * from table_name where cloum_name = "xxx" for update;注意!创建行级锁时,对应的字段上要有索引;行级的排他锁创建之后,当前事务具有该行的读、写权限;其它事务无写权限,并且读取到该行的内容是第一个事务提交前的内容,会出现脏读。后续的修改内容无法获取。这跟数据库的多版本并发机制有关(原理为:通过保存数据的历史版本来实现事务的隔离性)。
行级排他锁

锁的优缺点
【优点】
1.保证数据一致性:正确的使用锁能够确保在并发环境下,事务对数据的修改能够保持一致性。防止多个事务同时修改数据造成数据冲突。
2.提高系统并发性能:锁的存在,允许多个事务并发执行,能够提高系统的吞吐量。
3.支持事务隔离性:锁为事务提供了隔离性,使得每个事务能够在独立的环境中允许,从而保证了事务的正确性和可靠性。
4.确保系统稳定运行:合理的使用锁策略。可以减少或避免死锁的发生,确保系统稳定

【缺点】
1.降低并发性能:过度使用锁可能导致系统并发性下降
2.可能导致死锁:事务在获取锁时没有合理的顺序或未能及时释放锁,可能会导致死锁,即多个事务互相等待对方释放锁而无法继续执行。
3.增加系统复杂性:引入锁机制会增加系统的复杂性,需要更多的资源来管理和维护锁,同时也增加了程序设计的复杂性。

锁与隔离级别的关系
1.读未提交(Read Uncommitted):这是最低的隔离级别,它允许事务读取尚未提交的更改。在这个级别上,不会使用行级锁,因为读操作不需要等待其他事务释放锁。这可能导致脏读,即读取到其他事务未提交的数据。
2.读已提交(Read Committed):在该级别下,事务只会读取已经提交的数据。当一个事务开始读取数据时,它会获得一个共享锁,一旦读取完成,该锁就会被释放。这个级别的锁主要是为了解决脏读问题。
3.重复读(Repeatable Read):这是MySQL的默认隔离级别。它确保在一个事务的整个过程中可以重复读取同一行数据,并且看到相同的值,即使其他事务已经修改了这些数据。在这个级别上,事务会在读取数据时使用排他锁,直到事务结束。这种锁防止了脏读和不可重复读的问题。----跟MySQL的mvcc机制有关
4.序列化(Serializable):这是最高的隔离级别,它完全隔离事务,使得每个事务都像是在单独执行一样。在这个级别上,事务会对读取的所有行加上锁,无论是共享锁还是排他锁,并且会使用范围锁来保护一系列值不被其他事务修改。
注意!对于任何隔离级别,表级别的锁都会被使用。

                                                                                                             学海无涯

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第7篇:全加器的Signal Tap调试

Q:上一篇里我们对全加器进行了功能仿真,这次我们用Quartus软件里的Signal Tap Logic Analyzer工具对全加器进行调试。 A:Signal Tap Logic Analyzer是Quartus Prime设计软件中自带的系统级调试工具,它可以在FPGA设计中采集和显示…

编译原理-实现识别标识符的词法分析器——沐雨先生

实验任务: 实现识别标识符的词法分析器 实验要求: 根据编译原理理论课教材中图2.3“标识符的转换图”,用C语言编写识别标识符的词法分析器,以文本文件为输入,控制台(或文件)输出识别出的每个…

目标检测——PP-YOLOE-R算法解读

PP-YOLO系列,均是基于百度自研PaddlePaddle深度学习框架发布的算法,2020年基于YOLOv3改进发布PP-YOLO,2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet,2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列,所以放一起解…

java 封装

1、封装概述 (1)是面向对象三大特征之一(封装,继承,多态); (2)是面向对象编程语言对客观世界的模拟,客观世界里的成员变量都隐藏在对象内部,外界无法直接操作。通俗来说…

【zip密码】zip压缩包密码忘了,怎么办?

Zip压缩包设置了密码,解压的时候就需要输入正确对密码才能顺利解压出文件,正常当我们解压文件或者删除密码的时候,虽然方法多,但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么,忘记了zip压缩包的密…

Verilog刷题笔记39

题目:Create a 100-bit binary adder. The adder adds two 100-bit numbers and a carry-in to produce a 100-bit sum and carry out. 解题: module top_module( input [99:0] a, b,input cin,output cout,output [99:0] sum );wire [99:0]cc;assign …

【倪琴膝琴鉴赏】倪诗韵古琴小膝琴

此琴无论是材料还是做工,都很不错。琴体小巧精致,形制优美,边缘线条流畅有活力,各部位比例匀称,制作精当,真是美得不可方物,难得的形音俱佳之作。不愧为倪老师的代表作品——伏羲。 古人为了出行…

webpack5零基础入门-5使用webpack处理stylus文件

1.需要下载一个包 npm i stylus-loader 2.功能介绍 stylus-loader:负责将stylus文件编译成css文件 3.配置: const path require(path);//nodejs用来处理路径问题的模块module.exports {/**入口 */entry: ./src/main.js,/**输出 相对路径*/output: {/**文件输…

(vue)Module Error (from ./node_modules/eslint-loader/index.js)

(vue)Module Error (from ./node_modules/eslint-loader/index.js) 方法1:直接关闭eslint // vue.config.js module.exports {lintOnSave: false, //关闭eslint语法检查...... }方法2: 参考:解决参考 解决参考:如何修复vue-cli…

香港科技大学(广州)先进材料学域可持续能源与环境学域智能制造学域博士招生宣讲会——北京专场(暨全额奖学金政策)

三个学域代表教授亲临现场,面对面答疑解惑助攻申请!可带简历现场咨询和面试! 💰一经录取,享全额奖学金1.5万/月! 报名链接: https://www.wjx.top/vm/wF2Mant.aspx# 地点:中关村皇冠…

【进阶五】Python实现SDVRP(需求拆分)常见求解算法——差分进化算法(DE)

基于python语言,采用经典差分进化算法(DE)对 需求拆分车辆路径规划问题(SDVRP) 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整3. 求解结果4. 代码片段参考 往期优质资源 经过一年多的创作,目前已经成…

Transformer的前世今生 day01(预训练、统计语言模型)

预训练 在相似任务中,由于神经网络模型的浅层是通用的,如下图: 所以当我们的数据集不够大,不能产生性能良好的模型时,可以尝试让模型B在用模型A的浅层基础上,深层的部分自己生成参数,减小数据集…

【NLP学习记录】One-Hot编码

1. One-Hot编码概念 one-hot编码的基本思想是将每个类别映射到一个向量,其中只有一个元素的值为1,其余元素的值为0。这样,每个类别之间相互独立,不存在顺序或距离关系。 举例:对于三个类别的情况,可以使用…

【LIMS】微服务

目录 一、服务解决方案-Spring Cloud Alibaba1.1选用原因(基于Spring Cloud Alibaba的试用场景)1.2 核心组件使用前期规划 部署 nacos部署 mino使用JavaFreemarker模板引擎,根据XML模板文件生成Word文档使用JavaFlowable 工作流引擎前端 -vue…

信息发布系统

特色功能 画布功能---可任意拖动各控件的播放位置及大小,可任意选择屏幕背景色或添加背景图 同步联屏---毫秒级同步功能 视频切换无黑屏 触摸查询系统 会议预定系统 终端显示-会议综合屏 终端显示-会议预定屏 终端显示-移动端 广告发布系统 硬件产品-智能终端 硬件…

Codeforces Round 933(Div.3) A~F

A.Rudolf and the Ticket(暴力) 题意: 鲁道夫要去拜访伯纳德,他决定乘坐地铁去找他。车票可以在接受两个硬币的机器上购买,这两个硬币的总和不超过 k k k。 鲁道夫有两个装硬币的口袋。左边口袋里有 n n n枚面值为 …

有问有答开源问答平台网站源码系统 带完整的安装代码包以及搭建教程

在当前的信息爆炸时代,用户对于高效、精准地获取信息的需求日益强烈。问答平台以其独特的互动形式,能够为用户提供更加直接、实用的信息解答。然而,市场上的问答平台大多存在功能单一、定制化程度低等问题,难以满足用户多样化的需…

抖音无水印视频关键词批量下载|视频下载工具

抖音无水印视频关键词批量下载操作说明 我们根据自己的需要开发了抖音视频批量下载工具,现在市面上的视频无水印工具只能通过单个视频链接进行提取,太不方便 所以我们延伸出了 不仅可以通过单个视频链接进行提取也可通过关键词进行视频搜索 进行批量和有…

tsn交换机应用场景

TSN交换机应用场景 随着工业互联网的快速发展,越来越多的工业设备需要进行互联互通,并实现实时通信和数据传输。而传统的以太网交换机在满足工业互联网需求方面存在一定的局限性,因此,TSN(时钟同步网络)交换…

【数字图像处理系列】显示图像

显示图像 在 MATLAB 桌面上图像一般使用函数imshow来显示,该函数的基本语法为imshow(f,[])imshow(f,[])将变量 1ow设置为数组f的最小值,将变量high设置为数组的最大值 imshow(f,[low high])imshow(f,[low high])会将所有小于或等于1ow的值都显示为黑色,所有大于或等于high…