随笔分类 -  数据库 / MySQL

MySQL
摘要:1 前言 数据库中的锁,是一个很大的问题,从哪看起呢?该怎么看呢?所以在看锁之前,了解一些相关的前置知识,然后再去细看不同的场景下会加什么样的锁方便你快速理解。 官网,当然我们这里看的 引擎是 InnoDB 哈,那我们从以下几个问题看起: (1)数据库中的锁有哪些(怎么知道呢,网上的文章五花八门的各 阅读全文
posted @ 2024-02-28 09:05 酷酷- 阅读(110) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看MySQL 的 Buffer Pool哈。 2 为什么要有 Buffer Pool? 虽然说 MySQL 的数据是存储在磁盘里的,但是也不能每次都从磁盘里面读取数据,这样性能是极差的。 要想提升查询性能,加个缓存就行了嘛。所以,当数据从磁盘中取出后,缓存到内存中,下次查询同样 阅读全文
posted @ 2023-06-02 07:43 酷酷- 阅读(348) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看MySQL里的各种日志哈。 2 概述 之前我们知道了一条查询语句经历的过程,这属于「读」一条记录的过程,如下图: 那么,执行一条 update 语句,期间发生了什么?,比如这一条 update 语句: UPDATE t_user SET name = 'xxx' WHERE 阅读全文
posted @ 2023-06-02 07:31 酷酷- 阅读(349) 评论(0) 推荐(0) 编辑
摘要:1 前言 MySQL 会发生死锁么,当然会,有锁的地方,有多个事务的地方,就会出现互相争夺对方资源的情况,就会产生僵持,比如我们的业务场景:主要逻辑就是新增订单、修改订单、查询订单等操作。然后因为订单是不能重复的,所以当时在新增订单的时候做了幂等性校验,做法就是在新增订单记录之前,先通过 selec 阅读全文
posted @ 2023-05-26 13:36 酷酷- 阅读(190) 评论(0) 推荐(0) 编辑
摘要:1 前言 我们这节讨论下 记录锁+间隙锁可以防止删除操作而导致的幻读吗?答案是可以的哈。 2 什么是幻读 首先来看看 MySQL 文档是怎么定义幻读(Phantom Read)的: The so-called phantom problem occurs within a transaction w 阅读全文
posted @ 2023-05-26 07:46 酷酷- 阅读(86) 评论(0) 推荐(0) 编辑
摘要:1 前言 我们这节讨论下 update 语句修改数据库数据的时候,where 条件没有带上索引,会导致锁表么,说个前提,接下来说的案例都是基于 InnoDB 存储引擎,且事务的隔离级别是可重复读。 2 为什么会发生这种现象 InnoDB 存储引擎的默认事务隔离级别是「可重复读」,但是在这个隔离级别下 阅读全文
posted @ 2023-05-26 07:03 酷酷- 阅读(1680) 评论(0) 推荐(0) 编辑
摘要:1 前言 上节我们看了MySQL有哪些锁,那么这节我们就来看看MySQL的加锁过程,什么样的操作下加了什么样的锁等。 我先在这里给大家补充一个知识点:比如我的主键有:1、3、5 1的间隙锁是:(-oo,1) 1的next-key锁也就是临键锁是:(-oo,1] 3的间隙锁是:(1,3) 3的next 阅读全文
posted @ 2023-05-25 16:46 酷酷- 阅读(605) 评论(0) 推荐(0) 编辑
摘要:1 前言 我们这节来看看MySQL中的锁,采用 Q&A 的形式,看起来会比较轻松。 2 锁的分类 在 MySQL 里,根据加锁的范围,可以分为全局锁、表级锁和行锁三类。 3 全局锁 3.1 全局锁是怎么用的? 要使用全局锁,则要执行这条命令: flush tables with read lock 阅读全文
posted @ 2023-05-25 10:13 酷酷- 阅读(78) 评论(0) 推荐(0) 编辑
摘要:1 前言 我们上节MySQL InnoDB 引擎的默认隔离级别虽然是「可重复读」,但是它很大程度上避免幻读现象(并不是完全解决了),解决的方案有两种: 针对快照读(普通 select 语句),是通过 MVCC 方式解决了幻读,因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到 阅读全文
posted @ 2023-05-24 10:40 酷酷- 阅读(341) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看 MySQL中的事务,比如我们生活中的转账,要保证转账业务里的所有数据库的操作是不可分割的,要么全部执行成功 ,要么全部失败,不允许出现中间状态的数据。数据库中的「事务(Transaction)」就能达到这样的效果。 我们在转账操作前先开启事务,等所有数据库操作执行完成后,才 阅读全文
posted @ 2023-05-24 10:19 酷酷- 阅读(81) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个小问题: 题目1:一个表有多个字段,其中 name 是索引字段,其他非索引,id 拥有自增主键索引。 题目2:一个表有2个字段,其中 name 是索引字段,id 拥有自增主键索引。 上面两张表,分别执行以下查询语句: select * from s where name li 阅读全文
posted @ 2023-05-24 07:13 酷酷- 阅读(167) 评论(0) 推荐(0) 编辑
摘要:1 前言 在工作中,如果我们想提高一条语句查询速度,通常都会想对字段建立索引。 但是索引并不是万能的。建立了索引,并不意味着任何查询语句都能走索引扫描。 稍不注意,可能你写的查询语句是会导致索引失效,从而走了全表扫描,虽然查询的结果没问题,但是查询的性能大大降低。 今天就来跟大家盘一盘,常见的 6 阅读全文
posted @ 2023-05-24 07:01 酷酷- 阅读(67) 评论(0) 推荐(0) 编辑
摘要:1 前言 作为在后端圈开车的多年老司机,是不是经常听到过: “MySQL 单表最好不要超过 2000W” “单表超过 2000W 就要考虑数据迁移了” “你这个表数据都马上要到 2000W 了,难怪查询速度慢” 这些名言民语就和 “群里只讨论技术,不开车,开车速度不要超过 120 码,否则自动踢群” 阅读全文
posted @ 2023-05-24 06:43 酷酷- 阅读(93) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来聊聊索引哈。 2 什么是索引 当你想查阅书中某个知识的内容,你会选择一页一页的找呢?还是在书的目录去找呢? 傻瓜都知道时间是宝贵的,当然是选择在书的目录去找,找到后再翻到对应的页。书中的目录,就是充当索引的角色,方便我们快速查找书中的内容,所以索引是以空间换时间的设计思想。 那换 阅读全文
posted @ 2023-05-23 15:24 酷酷- 阅读(64) 评论(0) 推荐(0) 编辑
摘要:1 前言 不知道大家有没有困惑,我们的每行记录里的NULL值都是如何存放的,一行能无限制的放数据么有没有大小边界呢?要想知道这些,就要来看看MySQL 一行记录的存储结构。 2 MySQL 的数据存放在哪个文件? 大家都知道 MySQL 的数据都是保存在磁盘的,那具体是保存在哪个文件呢? MySQL 阅读全文
posted @ 2023-05-23 11:05 酷酷- 阅读(112) 评论(0) 推荐(0) 编辑
摘要:1 前言 我们学习 SQL 的时候,大家肯定第一个先学到的就是 select 查询语句了,比如下面这句查询语句: // 在 product 表中,查询 id = 1 的记录 select * from product where id = 1; 但是有没有想过,MySQL 执行一条 select 查 阅读全文
posted @ 2023-05-23 10:17 酷酷- 阅读(94) 评论(0) 推荐(0) 编辑
摘要:1 前言 我们本节来看看计数功能,大家可能都有用过count(*) 、 count(1)或者count(某个字段)那么哪种好呢?我们来讨论讨论。 2 count理解 当我们对一张数据表中的记录进行统计的时候,习惯都会使用 count 函数来统计,但是 count 函数传入的参数有很多种,比如 cou 阅读全文
posted @ 2023-05-23 07:37 酷酷- 阅读(90) 评论(0) 推荐(0) 编辑
摘要:1 前言 我们本节来看看我们常说的索引下推。 2 什么是索引下推 索引下推(Index Condition Pushdown,简称ICP),是MySQL5.6版本的新特性,用于优化数据查询。 不使用索引条件下推优化时存储引擎通过索引检索到数据,然后返回给MySQL服务器,服务器然后判断数据是否符合条 阅读全文
posted @ 2023-05-23 06:59 酷酷- 阅读(92) 评论(0) 推荐(0) 编辑
摘要:1 前言 我们本节看一个小问题,就是我们平时用的varchar(n)能存储几个汉字。 2 一个中文汉字占多少字节与编码有关 在mysql中,一个中文汉字所占的字节数与编码格式有关:如果是GBK编码,则一个中文汉字占2个字节;如果是UTF8编码,则一个中文汉字占3个字节,而英文字母占1字节。 UTF8 阅读全文
posted @ 2023-05-23 06:38 酷酷- 阅读(1456) 评论(0) 推荐(0) 编辑
摘要:1 前言 我们本节放松放松,看些基础的东西,来回顾下MySQL的字段类型。MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 主要包括以下五大类: 整数类型:BIT、BOOL、TINY INT、SMALL I 阅读全文
posted @ 2023-05-23 06:27 酷酷- 阅读(193) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示