mysql 锁总结

redo log 是事务持久性的保证
undo log 是事务原子性的保证
锁机制 是事务隔离性的保证
MySQL的
自动加锁
依赖于数据库的事务机制。当事务对某个数据行进行
更新
操作时,MySQL就会自动给该行加上排他锁,防止其他事务同时对其进行修改。同时,MySQL也会对读操作进行共享锁的加锁机制,确保读取的数据不被其他事务修改
MySQL的加锁机制是自动的,但人为干预也有其必要性。通过使用不同的加锁方式,可以灵活地掌控事务的并发控制,从而提高数据库的性能和安全性。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
mysql 8.0 新特性
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

begin;
select * from table_name for share nowait 、 select * from table_name for share skip locked

表锁、页锁、行锁

myisam 存储引擎 只支持表锁
innodb 存在引擎 支持 表锁、页锁、行锁

查看锁的情况
show open tables ; # show open tables where in_use>0; 查看有锁的记录
在这里插入图片描述
lock tables 表 read ## 共享锁
lock tables 表 write ## 排它锁
unlock tables ## 解锁
在这里插入图片描述
在这里插入图片描述

意向锁 IX

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

自增锁 AUTO_INC 锁 表级别的

mysql 中 可以为某个列,加 Auto_increment

create table  student(
stu_no   int   not null auto_increment,
stu_name  varchar(20) not null
)  engine = innodb default charset=utf8mb4 collate=utf8mb4_0900_ai_ci;

auto_increment 修饰的列,在添加数据的时候,可以省略或 null。

simple inserts 简单插入

可以**预先确定要插入的行数(当语句被初始化处理时)**的语句。包括没有嵌套子查询的单行和多行
insert 。。。。 values() 和 replace 语句
例如
insert into student(stu_name) values(‘zen’),(‘zen-ares’);

Bulk inserts 批量插入

**事先不知道要插入的行数(和所需要自动递增值的数量)**的语句。
insert 。。。。select ,replace。。。。select 和 load data 语句
innodb在处理一行,auto_increment 列分配一个新值

mixed-mode inserts 混合模式插入

在这里插入图片描述

在这里插入图片描述
innodb_autoinc_lock_mode
0:传统
1:连续
2:交错
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

元数据锁 MDL meta data lock

mdl锁,属于表锁范畴。MDL的作用是,保证读写的正确性。如果一个事务中一个查询正在遍历一个表的数据,而执行期间(事务没结束或终止)另一个线程(事务)对这个表结构做变更,增加一列,那么第一个事务的查询拿到的结构集跟表结构对不上,这个肯定是不行的。
对一个表做增删改查操作的时候,加 MDL读锁;当要对表做结构变更操作的时候,加MDL写锁
MDL读锁之间不互斥,因此可以多个线程(事务)同时对一个表增删改查。
MDL读写锁之间、mdl写锁之间是互斥的,用来保证变更表结构操作的安全性。
解决DML(如下)和DDL操作之间的一致性问题。不需要显示使用,跟意向锁一样,由引擎自动加解。
MDL在访问一个表的时候会被自动加上。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

show processlist;
在这里插入图片描述

行锁 row lock 又称记录锁

在这里插入图片描述

封锁记录中的间隔,防止间隔中被其他事务插入。
间隙锁主要出现在RR隔离级别,避免出现幻读。
行锁分三类
Record Lock,记录锁,也就是仅仅把一条记录锁上;
Gap Lock,间隙锁,锁定一个范围,但是不包含记录本身,只存在于可重复读隔离级别,目的是为了解决可重复读隔离级别下幻读的现象
Next-Key Lock:临键锁 Record Lock + Gap Lock 的组合,锁定一个范围,并且锁定记录本身。

记录锁

select

在这里插入图片描述
当事务执行 commit 后,事务过程中生成的锁都会被释放。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Gap lock 间隙锁

Gap Lock 称为间隙锁,只存在于可重复读隔离级别,目的是为了解决可重复读隔离级别下幻读的现象。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

next lock 临键锁

next-key lock 即能保护该记录,又能阻止其他事务将新纪录插入到被保护记录前面的间隙中。 (a,b]
在这里插入图片描述

插入意向锁

一个事务在插入一条记录的时候,需要判断插入位置是否已被其他事务加了间隙锁(next-key lock 也包含间隙锁)。

如果有的话,插入操作就会发生阻塞,直到拥有间隙锁的那个事务提交为止(释放间隙锁的时刻),在此期间会生成一个插入意向锁,表明有事务想在某个区间插入新记录,但是现在处于等待状态。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

页锁

在这里插入图片描述

悲观锁 乐观锁

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

隐式锁 VS 显示锁

查看锁情况
select * from performance_schema.data_lock_waits\G
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
显示锁
在这里插入图片描述

全局锁

在这里插入图片描述

死锁

产生死锁的必要条件
在这里插入图片描述
如何处理死锁

show variables like ‘innodb_lock_wait_timeout’;
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

锁结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

锁监控

show status like ‘%innodb_row_lock%’;
在这里插入图片描述
在这里插入图片描述
mysql 5.7
information_schema库中 innodb_trx 、innodb_locks 、 innodb_lock_waits 三个表中
innodb_locks :查看事务的锁情况,但只能看到阻塞事务的锁。
innodb_lock_waits: 只看等待的锁情况

mysql 8.0
删除了 information_schema数据库中的 innodb_locks 添加了 performance_schema数据库中的data_locks 表
data_locks:可以看到阻塞的事务的锁,还可以看到该事务所持有的锁。
information_schema.innodb_lock_waits 替换成 performance_shcema.data_lock_waits
information_schema.innodb_trx 依旧保留

在这里插入图片描述
performance_schema.data_locks

select * from performance_schema.data_locks\G
在这里插入图片描述

information_schema.innodb_trx

select * from information_schema.innodb_trx\G
在这里插入图片描述

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

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

相关文章

【Linux】常用工具(下)

Linux常用工具 一、Linux 项目自动化构建工具 - make/Makefile1. 依赖关系和依赖方法2. 伪目标3. make/Makefile 具有依赖性的推导能力(语法扩展)4. 编写一个进度条代码(1)缓冲区(2)\n 和 \r(3&…

硬件学习 PAD9.5 day02 原理图绘制中的操作,PCB 封装的制作

1. 原理图中的连线操作 1.1 点击连线按钮 1.2 点击需要连线的地方连接即可 1.3 双击即可停止连线 2. 原理图的总线绘制 2.1 按下总线绘制按钮 2.2 画一条总线 总线名称 总线名字 [ 起始数字 : 结束数字 ] 2.3 分线连接总线 注意:原理图的连线…

MySQL常用配置详解

目录 一、MySQL 查看配置信息二、MySQL 查看服务器当前运行状态的信息三、MySQL 常用配置详解1、mysql(使用mysql命令登录数据库时的默认的设置)2、client (客户端默认设置内容)3、mysqld(服务端端配置) 四…

【计算机网络】 拥塞控制

文章目录 背景TCP的四种拥塞控制算法慢开始与拥塞避免:快重传:快恢复: 流量控制和拥塞控制本质上的 区别 背景 网络中的链路容量和交换节点中的缓存和处理机都有着工作的极限,当网络的需求超过他们的工作极限时,就出现…

黄金代理前景如何,有得搞吗?

现货黄金代理这个职业时常都听人说过了,随着近期现货黄金走势不断出现行情,尤其是美国通胀严重,地缘政治局势频发,黄金走势不断获得支撑而走高。在这样的背景下,现货黄金代理这个职业的前景如何呢? 其实对于…

肖sir__mysql中数据库后端无法展示

mysql中数据库后端无法展示: 错误现象 解决方法: mysql中数据库后端无法展示:my.cnf (5,7数据库) 在 mysql 配置文件中加入: sql_modeNO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 或者重启数据库

【数据结构】二叉树的节点数,叶子数,第K层节点数,高度,查找x节点,判断是否为完全二叉树等方法

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

开源媒体浏览器Kyoo

什么是 Kyoo ? Kyoo 是一款开源媒体浏览器,可让您流式传输电影、电视节目或动漫。它是 Plex、Emby 或 Jellyfin 的替代品。Kyoo 是从头开始创建的,它不是一个分叉。一切都将永远是免费和开源的。 软件特性: 管理您的电影、电视剧…

极致鸿蒙2.0——华为MatePad系列安装AidLux,一个自带vscode的Python编译环境

看着刚刚人入手的华为鸿蒙系统MatePad11平板,是如此的美轮美奂,但是总感觉少了点什么,少了点什么呢?是编程环境,我爱MatePad,也爱编程,那如果可以在MatePad上编程,会发生什么&#x…

性能测试 —— Tomcat监控与调优:status页监控

Tomcat服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。 Tomcat是一个轻量级应用服务器,在中小型系统…

车载通信架构 —— SOME/IP 协议概述

车载通信架构 —— SOME/IP 协议概述 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 对学习而言,学习之后的思考、思考之后的行动、行动之后的改变更重要,如果不盯住内层的改变量,那么在表层投…

Java下打印直角三角型(另一个方向)

代码如下&#xff1a; public class MyWork {public static void main(String[] args) {int num 5;for (int i 0; i < num; i) {for (int j 0; j < i; j) {System.out.print("-");}for (int j 0; j < num - i; j) {System.out.print("*");}S…

OceanBase杨传辉传递亚运火炬:国产数据库为“智能亚运”提供稳稳支持

9 月 14 日&#xff0c;亚运火炬传递到了浙江台州&#xff0c;OceanBase 的 CTO 杨传辉作为火炬手交接了第 89 棒火炬。 2010 年&#xff0c;杨传辉作为创始成员之一参与自研原生分布式数据库 OceanBase。十年磨一剑&#xff0c;国产数据库 OceanBase 交出了一张优秀的成绩单&a…

实施主品牌进化战略(一):确立主品牌进化架构

主品牌进化战略&#xff0c;即以主品牌为核心创造、巩固、转化竞争优势应对竞争环境变化&#xff0c;避免衰退&#xff0c;回归增长&#xff0c;让主品牌进化的方法论体系。主品牌进化战略制定要从 4 个方面出发&#xff1a;确立主品牌进化架构、更新和明确主品牌竞争方向、建立…

【100天精通Python】Day67:Python可视化_Matplotlib 3D绘图,绘制3D曲面图、3D填充图,3D极坐标图,示例+代码

目录 1 绘制曲面图 2 绘制3D填充图 3 绘制极坐标图 1 绘制曲面图 当绘制3D曲面图时&#xff0c;mpl_toolkits.mplot3d 模块中的 Axes3D 对象提供了多种方法来呈现不同类型的曲面图。以下是一些常见的3D曲面图类型以及示例&#xff1a; 曲面图&#xff1a;使用 plot_surface …

修炼离线:(三)sqoop插入hbase 报错权限问题

一&#xff1a;报错现象。 二&#xff1a;解决方式。 方法一&#xff1a;修改文件所有者。 切换hadoop用户&#xff1a;export HADOOP_USER_NAMEhdfs hadoop fs -chown -R root:root /方法二&#xff1a;修改权限 切换hadoop用户&#xff1a;export HADOOP_USER_NAMEhdfs ha…

Proteus的编译运行(以AT89C51为例)

最近&#xff0c;突然又用到了Proteus,之前还是大三上的时候上微机原理的时候用到过&#xff0c;今天记录一下如何在Proteus中编写代码&#xff0c;编译运行。 首先&#xff0c;选中AT89C51芯片&#xff0c;右键选择编辑源代码。 选择芯片的系列与对应的编译器&#xff0c;这里…

OpenCV实现图像去水印功能(inpaint)

水印定位 需要根据图像特征获取水印的位置。 如图所示&#xff0c;图像左下角、右下角有水印。第一步&#xff0c;我们首先得定位水印所在位置。 Mat gray;cvtColor(src, gray, COLOR_BGR2GRAY);//图像二值化&#xff0c;筛选出白色区域部分Mat thresh;threshold(gray, thres…

在VMware虚拟机中固定CentOS系统ip(使用桥接模式)

目录 一、前置说明二、前置准备2.1、切换虚拟机网络为桥接模式2.2、查看本机网络信息 三、配置CentOS系统IP3.1、进入系统输入ip addr 查看本机网络配置名称3.2、查看网络配置目录&#xff0c;网络配置文件名称3.3、修改网络配置文件 ifcfg-ens33 固定IP3.4、重启网络 一、前置…

增强企业的网络防御:从哪里开始

在当今的数字环境中&#xff0c;网络安全事件已经变得异常普遍&#xff0c;影响着各种规模和行业的企业。中小型企业 (SME) 不再局限于知名组织&#xff0c;由于其潜在的漏洞和应对复杂威胁的资源有限&#xff0c;越来越多地成为网络犯罪分子的目标。 2023 年第一季度&#xf…