首页 > 数据库 >Mysql锁的学习

Mysql锁的学习

时间:2024-10-13 21:46:15浏览次数:7  
标签:对表 事务 加锁 行锁 记录 学习 Mysql 操作

Mysql的锁主要为全局锁、表锁和行锁。

全局锁是针对整个数据库的锁,最常用的是读锁写锁

读锁(共享锁):允许读取数据,不允许修改数据,可以保持数据一致性

写锁(排他锁):在你修改数据时,阻止其他用户读取和更改数据

使用场景:全库备份,全库导出

使用FLUSH TABLES WITH READ LOCK来加锁,UNLOCK TABLES来解锁

表锁:当一个操作正在对表进行写操作时,会阻止其他操作对该表进行写入操作或者读操作。

主要有两种:表共享读锁,表独占写锁(其他对表进行写的操作会阻塞)

在Mysql中,MyISAM引擎下,进行读操作会自动加上读锁,写操作会自动加上写锁

InnoDB引擎下,必要情况会使用表锁,主要使用行锁来实现多版本并发控制(MVCC),

什么时候用表锁(不确定)

  • MyISAM引擎下,不支持行锁,所以用表锁
  • 需要进行大批量的批处理操作
  • 防止死锁,在一些复杂的事务中,使用行锁可能导致死锁
  • 表结构变更:AlTER TABLE时,通常会自动加表锁
  • 事务隔离级别要求:一些事务对表的操作要求非常高,可以手动加锁

行锁:锁定单张表的一行

行级锁主要由InnoDB引擎提供,支持共享锁(S锁)和排他锁(X锁)

行锁只能在事务中有效

适合高并发环境下的 并发操作,频繁更新少量行的数据

命令:

  • select …… for update(X锁)
  • select ……lock in share mode(S锁)
  • insert(X锁)
  • update(X锁)
  • delete(X锁)

间隙锁:锁定的不是具体的行记录,而是两条记录的间隙,可以防止新的记录插入到该间隙

主要为了解决幻读问题,即在一个事物中读取某个范围的记录时,另外一个事物插入了新的记录,当第一个事务再次读取该范围时,会发现本来不存在的记录

临键锁(next-key):可以理解为特殊的间隙锁(左开又闭),他是行锁和间隙锁的组合,在可重复读隔离级别下解决幻读,锁定的范围不仅包括具体的记录,还包括记录前后的间隙。

乐观锁:不对数据进行加锁,而是通过版本号、时间戳等机制在提交时检查数据是否被其他事务修改。如果没有修改则允许提交,如果发生了修改,则拒绝提交并抛出异常。

悲观锁:在数据操作之前,假设会发送冲突,因此在操作数据时会主动加锁

意向锁(表级锁)用来表明一个事务在对表中的某些行加锁之前,已经对这个表进行了加锁的操作。

意向共享锁意向排他锁是Innodb存储引擎中实现行级锁和表级锁之间的协同机制。主要目的是在对表进行锁定的同时,避免潜在的死锁和提高并发性能,提供一种机制,以表明后续操作将申请共享锁,使得其他事务能快速判断表的锁定状态。

标签:对表,事务,加锁,行锁,记录,学习,Mysql,操作
From: https://blog.csdn.net/m0_63220670/article/details/142894908

相关文章

  • numpy库 学习
    1.导入NumPyimportnumpyasnp2.创建数组2.1一维数组a=np.array([1,2,3,4,5])print(a)2.2多维数组b=np.array([[1,2,3],[4,5,6]])print(b)2.3特殊数组全零数组:zeros=np.zeros((3,3))print(zeros)全一数组:ones=np.ones((3,3))pri......
  • Web前端开发入门学习笔记之CSS 43-47 --新手超级友好版-复合选择器+css特性篇
         Foreword写在前面的话: 大家好,我是一名刚开始学习HTML的新手。这篇文章是我在学习html过程中的一些笔记和心得,希望能和同样在学习HTML的朋友们分享。由于我的知识有限,文章中可能存在错误或不准确的地方,欢迎大家在评论区提出建议和指正。我非常期待大家的反馈,以便......
  • numpy库 学习总结
    NumPy官方文档链接英文官方文档:主页:NumPyDocumentation参考手册:NumPyReference用户指南:NumPyUserGuide中文官方文档:主页:[https://www.numpy.org.cn/reference/]参考手册:NumPy参考手册(中文版)用户指南:NumPy用户指南(中文版)NumPy官方文档总结1.简介Num......
  • Spring学习——SpringAOP
    0.IOC思想(DI)1.关键注解 @Repository publicclassDeptDaoImpl1implementsDeptDao{} @Repository @Primary publicclassDeptDaoImpl2implementsDeptDao{} @Service publicclassDeptServiceImplimplementsDeptService{ @Autowired @Qulif......
  • 2024-2025第一学年 20241410苏尚君《计算机基础与程序设计》第三周学习总结
    这个作业属于哪个课程(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里(2024-2025-1计算机基础与程序设计第三周作业这个作业的目标门电路,组合电路,逻辑电路,冯诺依曼结构作业正文教材学习内容总结一、门定义:“门”通常指的是逻辑门(LogicGates),这是构......
  • 深度学习神经网络笔记--卷积神经网络
    为什么要用卷积捕捉特征,如文末的图)不受位置影响(左右,前后,上下)可以参考下图:卷积操作可移动的小窗口与图像数据逐元素相乘后相加小窗口是滤波器,卷积核,(权重矩阵)需要注意的问题:stride:步长卷积核的个数:决定输出的depth,卷积核个数填充值zerp-padding:外圈补0......
  • 云计算(第二阶段):mysql后的shell
    第一章:变量前言什么是shellShell是一种提供用户与操作系统内核交互的工具,它接受用户输入的命令,解释后交给操作系统去执行。它不仅可以作为命令解释器,还可以通过脚本完成一系列自动化任务。shell的特点跨平台:大多数Shell都可以在不同的类UNIX系统上运行,包括Linux......
  • 2024-2025 20241313刘鸣宇《计算机基础与程序设计》第三周学习总结
    1.阅读《C语言程序设计》,对有疑问的地方寻找AI进行解答2.3.《计算机科学概论》学习总结(1)第二章学习了不同进制(二进制,十进制,八进制,十六进制)之间的转换学习了其他技术系统中的运算规则(2)第三章1.信息与数据的区别:信息是数据的一种2.为何进行数据压缩:网络具有固定的带宽限制,压......
  • 设计模式学习整理
    学习参考:重构大师创建型模式创建型模式提供了创建对象的机制,能够提升已有代码的灵活性和可复用性。工厂方法模式在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型;实现方式:使用特殊的工厂方法代替对于对象构造函数的直接调用(即使用new运算符),对象仍将通......
  • MySQL(压缩包)配置过程
    1.下载MySQL安装包MySQL::DownloadMySQLCommunityServer2.将下载完成的压缩包解压到某一目录,如:C:\MySQL并在系统环境中添加以上目录。 3.在上述目录下新建my.ini文件,并在文件中输入以下内容:[mysqld]port=3306basedir=C:\MySQLdatadir=C:\MySQL\datamax_connect......