作者:操盛春,爱可生技术专家,公众号『一树一溪』作者,专注于研究 MySQL 和 OceanBase 源码。爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文基于 MySQL 8.0.32 源码,存储引擎为 InnoDB。正文1. 准备工作确认事务隔离级别为可重复读:show variables like 'transactio ......
38
0
0
2024-11-01
前言数据库通常会同时执行多个事务,这些事务可能同时对同一批数据进行增删改查操作,可能会导致脏写、脏读、不可重复读和幻读等问题。这些问题的根本是数据库的多事务并发性问题。为了解决多事务并发问题,数据库引入了事务隔离机制、锁机制和 MVCC 多版本并发控制隔离机制等一系列机制。接下来,小鱼将深入探讨这些机制,帮助各位 uu 们更好地理解数据库内部的执行原理。My ......
35
0
0
2024-10-31
最近线上偶发MySQL的死锁异常,发现原来很多理论都只背了个结论,细节都是魔鬼。比如,MySQL在RR级别用gap lock防止幻读,RC级别就没有gap lock吗?不妨来一起看看,MySQL的死锁问题有哪些你不了解的细节。1、死锁信息1.1 数据库基本信息版本:MySQL 5.7隔离级别: READ-COMMITTED表结构:1.2 死锁日志死锁日志分析 ......
73
0
0
2024-09-03
前言转眼又一年~~2023马上就要到尾声了,在最后的几天中,我想给大家分享一下 MySQL 的一些小知识。一、事务1.1 含义通俗理解:在我的理解下,事务可以使 一组操作,要么全部成功,要么全部失败。事务其目的是为了下保证数据最终的一致性。举个例子:举个例子,我给你发支付宝转了666块红包。那自然我的支付宝余额会扣减666块,你的支付宝余额会增加666块。1 ......
371
0
0
2024-04-19
本文字数:3107字,阅读大约需要 10 分钟。MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,确保查询结果的一致性和并发安全性。概念解释记录锁(Record Lock)记录锁也被称为行锁,顾名思义,它是针对数据库中的行记录进行的锁定。比如:SELECT * FROM `user` WHERE `id`=1 FOR UPD ......
395
0
0
2024-04-09
有小伙伴在微信上表示面试时被问到了 Next-Key Lock 是啥,结果一脸懵逼,那么今天我们来捋一捋 MySQL 中的记录锁、间隙锁以及 Next-Key Lock。 1. Record Lock Record Lock 也就是我们所说的记录锁,记录锁是对索引记录的锁,注意,它是针对 索引 记录 ,即它只锁定记录这一行数据。 ......
221
0
0
2024-03-04
MySQL隔离级别测试隔离级别数据库准备数据库如下图所示,所有字段都是int(方便测试),id为主键索引,name为普通索引(唯一索引),age没有索引Read Uncommitted(读取未提交内容)打开两个mysql终端,都设置session级别的隔离级别为读取未提交内容(本次会话有效)set session transaction isolation ......
230
0
0
2024-02-27
1说在前面本文分析了 INSERT 及其变种(REPLACE/INSERT ON DUPLICATE KEY UPDATE)的几个场景的死锁及如何避免:场景一:INSERT 唯一键冲突[1]场景二/三:REPLACE INTO 唯一键冲突(来自线上业务)场景四:INSERT 主键冲突(来自官方案例)其实 Google 一番,也会有大量这样的文章。本文只是就几 ......
208
0
0
2024-01-29
| 导语记录一次于2023年01月23日遇到的死锁问题。1、基础1.1 数据库隔离级别1.1.1RCREAD COMMITTED:只能读取已经提交的数据;此时:允许幻读和不可重复读,但不允许脏读,所以RC隔离级别要求解决脏读;1.1.2RRREPEATABLE READ:同一个事务中多次执行同一个select,读取到的数据没有发生改变;此时:允许幻读,但不允 ......
207
0
0
2024-01-23
一、简介锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除了传统的计算资源(CPU、RAM、i/O)的挣用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性,有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素,从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。二、分类MySQL中的锁、 ......
242
0
0
2024-01-17
MySQL 作为目前互联网企业使用最多的,或者说在基于成本下,最流行的数据库之一,MySQL 在国内使用者众多,那么在MySQL偶然安装后,在使用中出现死锁后,死锁中的事务到底能不能回滚 ?我们来进行相关的实验我们先验证一遍1 我们打开一个MySQL 版本为 8.027 官方版本2 通过下面的操作我们可以确认两个分屏访问的是同一个MySQL的数据库3 我们在 ......
217
0
0
2024-01-14
MySQL锁机制起步锁是计算机用以协调多个进程间并发访问同一共享资源的一种机制。 mysql 中为了保证数据访问的一致性与有效性等功能,实现了锁机制,MySQL中的锁是在服务器层或者存储引擎层实现的。 行锁与表锁首先我们来了解行锁与表锁的基本概念,从名字中我们就可以了解:表锁就是对整张表进行加锁,而行锁则是锁定某行、某几行数据或者行之间的间隙。 各引擎对锁的 ......
235
0
0
2023-11-25
mysql – 死锁 的产生及解决方案1. 死锁与产生死锁的四个必要条件1.1 什么是死锁 死锁 是指 2+ 的 进程 在 执行过程 中,由于竞争资源或者由于彼此通信而造成的一种 阻塞 的现象,若无外力作用,它们都将 无法推进 下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死 ......
349
0
0
2023-10-12
来自: 贝壳DBA 咱们使用 MySQL 大概率上都会遇到死锁问题,这实在是个令人非常头痛的问题。本文将会对死锁进行相应介绍,对常见的死锁案例进行相关分析与探讨,以及如何去尽可能避免死锁给出一些建议。 –什么是死锁 — 死锁是并发系统中常见的问题,同样也会出现在数据库MySQL的并发读写请求场景中。当两个及以上的事务,双方都在等待对方释放已经持有的锁或 ......
363
0
0
2023-09-15
目录mysql 间隙锁加锁11个规则next-key lock的加锁规则案例分析案例一:唯一索引等值查询间隙锁案例二:非唯一索引等值查询锁案例三:主键索引范围查询锁案例四:非唯一索引范围查询锁案例五:唯一索引范围查询锁 bug案例六:非唯一索引上存在 " " 等值 " " 的例子案例七: limit 语句加锁案例八:一个死锁的例子案例九:order by索引 ......
323
0
0
2023-09-08