首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >两万字详解!InnoDB锁专题!

两万字详解!InnoDB锁专题!

作者头像
用户1263954
发布2022-05-23 16:04:49
4120
发布2022-05-23 16:04:49
举报

前言

本文将跟大家聊聊InnoDB的锁。本文比较长,包括一条SQL是如何加锁的,一些加锁规则、如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的。

  1. 为什么需要加锁呢?
  2. InnoDB的七种锁介绍
  3. 一条SQL是如何加锁的
  4. RR隔离级别下的加锁规则
  5. 如何查看事务加锁情况
  6. 死锁案例分析

1. 为什么需要加锁?

数据库为什么需要加锁呢?

在日常生活中,如果你心情不好。想要一个人静静,不想被比别人打扰,你就可以把自己关进房间里,并且反锁

同理,对于MySQL数据库来说的话,一般的对象都是一个事务一个事务来说的。所以,如果一个事务内,正在写某个SQL,我们肯定不想它被别的事务影响到嘛?因此,数据库设计大叔,就给被操作的SQL加上锁

专业一点的说法: 如果有多个并发请求存取数据,在数据就可能会产生多个事务同时操作同一行数据。如果并发操作不加控制,不加锁的话,就可能写入了不正确的数据,或者导致读取了不正确的数据,破坏了数据的一致性。因此需要考虑加锁。

1.1 事务并发存在的问题

  • 脏读:一个事务A读取到事务B未提交的数据,就是脏读
  • 不可重复读:事务A被事务B干扰到了!在事务A范围内,两个相同的查询,读取同一条记录,却返回了不同的数据,这就是不可重复读
  • 幻读:事务A查询一个范围的结果集,另一个并发事务B往这个范围中插入/删除了数据,并静悄悄地提交,然后事务A再次查询相同的范围,两次读取得到的结果集不一样了,这就是幻读。

6.2 分析死锁日志

  1. show engine innodb status,查看最近一次死锁日志。如下:
  1. 查看正在执行,产生死锁的对应的SQL,如下:
  1. 查看分开两部分的TRANSACTION,分别持有什么锁,和等待什么锁。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT技术精选文摘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 为什么需要加锁?
    • 1.1 事务并发存在的问题
      • 6.2 分析死锁日志
      相关产品与服务
      云数据库 SQL Server
      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档