只要学计算机,「 锁 」永远是一个绕不过的话题。 mysql 锁也是一样。一句话解释MySQL锁: MySQL锁是 解决资源竞争 的一种方案。 短短一句话却包含了3点值得我们注意的事情: 对什么资源进行竞争? 竞争的方式(或者说情形)有哪些? 锁是如何解决竞争的? 这篇文章开始带你循序渐进地理解这几个问题。 1. 资源的竞争方式MySQL对资源的操 ......
306
0
0
2023-06-26
目录锁共享锁排他锁意向锁记录锁间隙锁临键锁死锁死锁产生条件行锁发生死锁表锁发生死锁锁的释放事务阻塞死锁的避免锁的日志行锁的原理不带任何索引的表带主键索引的表带唯一索引的表结论1.表必定有索引2.唯一索引数据行加锁,主键索引同样被锁锁锁是用来解决事务对数据的并发访问的问题的。MyISAM支持表锁,InnoDB同时支持表锁和行锁。表加锁语法:lock table ......
286
0
0
2023-06-24
本文转自高效运维这么热天能来的都是真爱,我给大家讲一下这个课题,主要讲源码,这个课题与 运维 看起来有点小差别。你能看源码,至少你在运维时候可以跟开发说是看源码怎么怎么样,我们就可以更有底气。而且有点很重要,我们看数据库里面,现在大家很多用的,不管开源的 MySQL ,还是闭源的像 oracle 都是国外数据库,我们数据库底子还是挺薄,越来越人开始研究源码和 ......
288
0
0
2023-06-16
目录MySQL事务和锁事务事务的控制语句事务隔离级别设置脏读不可重复读幻读锁机制InnoDB的行级锁锁实战死锁总结MySQL事务和锁事务说到关系型的数据库的事务,相信大家对四大特性都不陌生,分别是原子性、一致性、隔离性、持久性,简称为ACID特性。MySQL中支持3种不同的存储引擎:MyISAM存储引擎、Memory存储引擎、和InnoDB存储引擎注:只有I ......
335
0
0
2023-06-12
不少人在开发的时候,应该很少会注意到这些锁的问题,也很少会给程序加锁(除了库存这些对数量准确性要求极高的情况下),即使我们不会这些锁知识,我们的程序在一般情况下还是可以跑得好好的。因为数据库隐式帮我们加了这些锁了,只有在某些特定的场景下我们才需要手动加锁。对于UPDATE、DELETE、INSERT语句,InnoDB会自动给涉及数据集加排他锁(X) 。而My ......
345
0
0
2023-05-21
目录前言全局锁表级锁表锁元数据锁意向锁行级锁总结前言MySQL Innodb 的锁可以说是执行引擎的并发基础了,有了锁才能保证数据的一致性。众所周知,我们都知道 Innodb 有全局锁、表级锁、行级锁三种,但你知道什么时候会用表锁,什么时候会用行锁吗?虽然对 MySQL 的知识点挺熟悉的,但一开始看到这个问题,树哥也是有点懵,我还真没从这个角度去思考过。大家 ......
354
0
0
2023-02-09
目录前言锁分类表结构悲观锁乐观锁适用场景总结前言对于MySQL中的乐观锁和悲观锁,可能很多的开发者还不是很熟悉,并不知道其中具体是如何实现的。本文就针对这个问题做一个实际案例演示,让你彻底明白这两种锁的区别。锁分类MySQL的中锁按照范围主要分为表锁、行锁和页面锁。其中myisam存储引擎只支持表锁,InnoDB不仅仅支持行锁,在一定程度上也支持表锁。按照行 ......
368
0
0
2023-02-04
文章目录前言一、共享锁(S)和排它锁(X)二、行锁的3种算法Record LockGap LockNext-key Lock三、加锁规则 之 等值查询分析数据准备3.1 聚集索引有匹配索引无匹配索引3.2 唯一索引有匹配索引无匹配索引3.3 普通索引有匹配索引无匹配索引总结前言如何控制并发是数据库领域中非常重要的问题之一,MySQL为了解决并发带来的问题,设 ......
434
0
0
2023-01-13
1️⃣ 死锁概述在正式开始今天的讲解之前,我们先回顾一下死锁的相关知识死锁是指两个或者两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而导致的一种阻塞的现象,如果没有外力,他们将一直等待下去。就跟卡bug一样,比如说你去面试,面试官问你:MySQL为什么会死锁;你告诉面试官:你录用我我就告诉你,面试官说:你告诉我我就录用你,然后你两就一直这么你问我我 ......
451
0
0
2023-01-07
现象描述客户在夜间批量执行数据处理时发生了死锁现象,是由不同的会话并发删除数据引起的,这个问题原因是比较简单,但想通过这个案例让大家熟悉如何去排查死锁问题,如何去阅读死锁日志这才是目的。通过模拟用户死锁现象后,死锁日志如下:*** (1) TRANSACTION: TRANSACTION 39474, ACTIVE 58 sec starting inde ......
505
0
0
2022-12-28
本篇内容包括:MySQL锁、MySQL MVCC概述以及MySQL Mvcc实现三大要素一、MySQL锁数据库的锁是为了解决事务的隔离性问题,为了让事务之间相互不影响,每个事务进行操作的时候都会对数据加上一把特有的锁,防止其他事务同时操作数据。如果你想一个人静一静,不被别人打扰,那么请在你的房门上加上一把锁。数据库里面的锁是基于索引实现的,在Innodb中我 ......
348
0
0
2022-12-19
多事务更新同一行数据时加独占锁避免脏写如果有事务在表里执行增删改操作,那在行级会加独占锁,此时其实同时会在表级加一个意向独占锁;如果有事务在表里执行查询操作,那么会在表级加一个意向共享锁。其实平时操作数据库,比较常见的两种表锁,反而是更新和查询操作加的意向独占锁和意向共享锁,但是可以忽略这个意向独占锁和意向共享锁,因为两种意向锁根本不会互斥;锁的类型表锁读锁 ......
380
0
0
2022-12-17
作者:小林coding八股文网站:xiaolincoding.com大家好,我是小林。大家误以为「插入意向锁」是意向锁,也就是表锁,确实这个名字很让人误解。但是,实际上「插入意向锁」不是意向锁,而是特殊的间隙锁,属于行级锁,注意是「特殊」的间隙锁,并不是我们常说的间隙锁。所以,我在原来文章的基础上补充了两个知识点:什么是插入意向锁?insert 语句是怎么加 ......
392
0
0
2022-12-12
看如下一条sql语句:# table T (id int, name varchar(20)) delete from T where id = 10; MySQL在执行的过程中,是如何加锁呢?在看下面这条语句:select * from T where id = 10; 那这条语句呢?其实这其中包含太多知识点了。要回答这两个问题,首先需要了解一些知识 ......
347
0
0
2022-12-09
背景考虑下面两个并发带来的问题:1、丢失更新:一个事务的更新结果覆盖了其它事务的更新结果,即所谓的更新丢失。2、脏读:当一个事务读取其它完成一半事务的记录时,就会发生脏读取。例如:两个用户同时修改商品库存表,A、B同时进入,看到的库存都是100,A购买一件把库存修改为99(100-1)。此时B购买两件把库存修改为98(100-2),因为A、B同时读到的库存都 ......
359
0
0
2022-12-09