当前位置: 首页 > news >正文

mysql行锁,表锁,间隙锁

我们在使用数据库的过程中在处理有关金额方面的数据时可能会使用到锁的知识,下面我来给大家演示一下数据库锁的使用

首先我们知道数据库默认是自动提交事务

SET autocommit=0是关闭自动提交

SET autocommit=1是开启自动提交,默认是开启的

我们先关闭自动提交,表a如下

 我们执行UPDATE a set name='a3' where id=4

执行之后我们SELECT * FROM `a`

然后在打开另一个临时会话

 

这时候我们看到解决是不同的,这是因为我们没有提交事务,防止脏读的发生

然后我们commit一下

这时候我们就能看到会话2就可以看到了

接下来我们在会话2执行一下修改方法

我们在会话一执行UPDATE a set name='a3' where id=4

会话2执行UPDATE a set name='a4' where id=4

 

这时候可以看到会话2是在处于等待操作

这时候我们执行会话1的commit

我们看到会话2执行成功,并且一直在等到执行

这就是产生了一个行锁的竞争

那么什么是表锁呢.表锁是锁住了整个数据表操作,通常发生的场景是在使用条件时加了or作为链接,会产生一个表的锁

比如我们在会话一执行UPDATE a set name='a3' where id=4 or id=5

会话2执行UPDATE a set name='a4' where id=6会锁住就像行锁一样必须等待会话一执行完毕

那么什么是间隙锁呢,你如现在我们是id1 3  5  7 的话

我们会话1执行一个update a set name='a4' where id>1 and id<7的数据

 会话2 insert into a values(4,'b6')插入id为4的数据,我们可以看到id并没有4的数据但是因为会话一没有结束,我们也是不会执行操作的

范围锁的灾难性也是比较大的,如果我们表锁住一万行数据,我们就不能操作这一万行数据了

最后我们可以使用show status like 'innodb row lock%'来查看一个数据库的性能和锁的使用情况

相关文章:

  • 【GEE笔记11】数值Number(常见指令方法4)
  • Linux_进程概念
  • 【PAT乙】2022秋季赛后总结
  • nginx + tomcat 搭建负载均衡、动静分离(tomcat多实例)
  • CSRF(跨站请求伪造)攻击和预防
  • 【都 Java17 了,还不了解 Java 8 ? 】一文带你深入了解 Java 8 新特性
  • 解决国产机SVN连接失败的问题
  • MySQL 存储过程创建指定表结构
  • 我们这样的人
  • < Linux > 进程概念(2)
  • Qt5开发从入门到精通——第四篇十二节(不规则窗体)
  • MySQL 5.7.x--命令行自带帮助文档的使用,超级棒!!!
  • 手撕前端面试题【javascript】
  • Qt5开发从入门到精通——第四篇十三节(程序启动画面 )
  • postman+Newman+jenkins实现接口自动化测试持续集成
  • python3.6+scrapy+mysql 爬虫实战
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • co模块的前端实现
  • Django 博客开发教程 16 - 统计文章阅读量
  • HTML中设置input等文本框为不可操作
  • httpie使用详解
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • js作用域和this的理解
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • MobX
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Travix是如何部署应用程序到Kubernetes上的
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从tcpdump抓包看TCP/IP协议
  • 给第三方使用接口的 URL 签名实现
  • 关于for循环的简单归纳
  • 简单基于spring的redis配置(单机和集群模式)
  • 前端临床手札——文件上传
  • 写代码的正确姿势
  • 优化 Vue 项目编译文件大小
  • 阿里云服务器购买完整流程
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • #考研#计算机文化知识1(局域网及网络互联)
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (30)数组元素和与数字和的绝对差
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (力扣题库)跳跃游戏II(c++)
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (一)基于IDEA的JAVA基础12
  • (转)创业家杂志:UCWEB天使第一步
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .naturalWidth 和naturalHeight属性,
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • /var/spool/postfix/maildrop 下有大量文件