
MySQL
文章平均质量分 54
virtuousOne
virtuousOne
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MySQL架构全面理解
这篇摘要介绍了MySQL查询和更新语句的执行过程。查询过程包括连接器建立连接、查询缓存、分析器解析SQL、优化器选择执行方案和执行器执行语句。更新语句则涉及重做日志(redo log)和归档日志(binlog)两个关键模块,redo log用于即时记录更新操作,而binlog用于数据恢复。文章通过图示和代码示例,展示了从SQL语句输入到结果返回的完整流程,重点解析了MySQL内部各组件的工作原理和协作方式。原创 2025-08-03 19:10:29 · 221 阅读 · 0 评论 -
MySQL锁机制与MVCC原理剖析
摘要:本文介绍了MySQL中的锁机制和MVCC实现原理。MySQL包含表锁、行锁等粒度锁,以及读/写锁、乐观/悲观锁等类型。重点讲解了间隙锁在解决不可重复读和幻读问题中的作用。MVCC通过undo日志版本链和read-view机制实现事务隔离,详细分析了可重复读和读已提交隔离级别下read-view的生成规则及数据可见性判断流程,并通过示例说明了不同隔离级别下的查询结果差异。MVCC机制避免了频繁加锁,提高了并发性能。原创 2025-07-27 17:47:30 · 416 阅读 · 0 评论 -
MySQL事务原理
摘要:MySQL事务的ACID特性通过undo log、锁机制和redo log实现。并发事务可能引发脏写、脏读、不可重复读和幻读问题,默认隔离级别为可重复读。大事务会导致连接池耗尽、锁冲突、主从延迟等问题。优化建议包括:事务外处理查询、拆分大数据操作、延迟加锁操作以及采用异步处理。关键措施是减少事务范围和持续时间,提升系统并发性能。原创 2025-07-26 18:38:22 · 193 阅读 · 0 评论 -
Order By 多条件排序【MySQL】
mysql 多字段排序,原来是需要逗号隔开,进行描写条件。之前都以为是作为一个,直接逗号一起就行;根据两个条件进行排序查询,开始以为很简单的写了SQL。以为结束了,仔细才发现,后续的没有根据id 进行排序。碰到一个SQL的排序问题,先排序后分页。最终将SQL修改为如下: 完成了该功能。开始就很简单的写了根据多条件的排序。记录一下这个小知识点。原创 2022-10-29 12:53:36 · 2183 阅读 · 0 评论 -
MySQL学习之---一条SQL更新语句是如何执行的?
一条更新语句的执行流程又是怎样的呢?mysql> update T set c=c+1 where ID=2;与查询流程不一样的是,更新流程还涉及两个重要的日志模块,它们正是我们今天要讨论的主角:redo log(重做日志)和 binlog(归档日志)、重要的日志模块:redo log在 MySQL 里也有这个问题,如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高。为了解决这个问题,MySQL 的设计者就用了类似酒店掌柜粉板原创 2020-12-02 23:30:09 · 210 阅读 · 0 评论 -
MySQL学习之---一条SQL查询语句是如何执行的?
首先,我们引入一个问题;问题:如果表 T 中没有字段 k,而你执行了这个语句 select * from T where k=1, 那肯定是会报“不存在这个列”的错误: “Unknown column ‘k’ in ‘where clause’”。你觉得这个错误是在我们上面提到的哪个阶段报出来的呢?接下来,我们把MySQL拆解一下,看看里面都有哪些“零件”,希望借由这个拆解过程,可以对 MySQL 有更深入的理解。这样当我们碰到 MySQL 的一些异常或者问题时,就能够直戳本质,更为快速地定位并解决问题原创 2020-12-02 11:42:27 · 511 阅读 · 0 评论 -
MySQL之SQL全表扫描有什么坏处,什么情况是会导致全表扫描
全表扫描,指的是执行SQL的时候,无法使用索引,导致查询和执行缓慢。除此之外的坏处是:执行缓慢可能会导致Java程序里的后续处理被阻塞,降低了 系统的响应速度,同时全表扫描导致了对数据库资源的耗时占用,降低了数据库本身的并发性能。严重的会导致使用数据库的所有应用程序的卡顿。会引起全表扫描的SQL语句:1.模糊查询效率很低:原因:like本身效率很低就比较低,应该尽量避免查询条件使用like;对于like‘%…%’(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低;另外,由于匹配算法的关系,模原创 2020-06-29 17:32:04 · 2445 阅读 · 0 评论 -
MySQL事务与锁详解
MySQL事务详解事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行。程序和事务是两个不同的概念。一般而言:一段程序中可能包含多个事务。(说白了就是几步的数据库操作而构成的逻辑执行单元)事务具有四个特性:**原子性 A (Actomicity):**事务是一个原子操作单元。在当时原子是不可分割的最小元素,其对数据的修改,要么全部成功,要么全部都不成功...原创 2020-02-05 14:10:48 · 989 阅读 · 0 评论 -
MySQL索引创建
1.什么是索引?索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。索引的建立是表中比较有指向性的字段,相当于目录,比如说行政区域代码,同一个地域的行政区域代码都是相同的,那么给这一列加上索引,避免让...原创 2020-02-03 14:07:26 · 945 阅读 · 0 评论 -
通过explain查询分析SQL的执行计划
MySQL 之 Explain 输出分析背景这篇文章我们来聊聊 MySQL 的 Explain,估计大家在工作或者面试中多多少少都会接触过这个。可能工作中实际使用的不多,但是不论的自己学习还是面试,都需要掌握的。Explain 可以使用在SELECT, DELETE, INSERT, REPLACE, and UPDATE 语句中,执行的结果会在每一行显示用到的每一个表的详细信息。简单语句可...原创 2020-02-01 20:49:03 · 1449 阅读 · 1 评论 -
MySQL报错:不能区分大小写(Linux下部署MySQL)
今天运行项目,发现报错了。错误信息这会没有了,描述的是找不到表。到数据库进行查询如下图所示:可以发现问题了,数据库不支持大小写。通过该博客,可以发现,到服务器进行添加一条配置,并重启即可;https://www.cnblogs.com/skyessay/p/9082148.html在 etc目录下,并进行编辑my.cnf。最后一行加上下面一句lower_case_table_na...原创 2019-12-18 19:49:25 · 1173 阅读 · 0 评论 -
MySQL给用户分配权限
今天用root账户添加添加了数据库后,其他非root账户看不到新添加的数据库,然后百度了相关教程;方式一:直接在mysql执行如下步骤GRANT ALL ON xyshop.* TO 'xyuser'@'%';flush privileges修改指导源于:GRANT ALL ON menagerie.* TO 'your_mysql_name'@'your_client_host';...原创 2019-12-18 19:19:57 · 1976 阅读 · 0 评论 -
Windows下安装MySQL5.7.28(解压版本)
1、首先下载MySQL推荐去官网上下载MySQL,如果不想找,那么下面就是:Windows64位地址: https://pan.baidu.com/s/1UIppkcyd2TpFkF8kM3M27g2.安装之前,先卸载之前的版本。先到管理去停止mysql的服务,然后删除mysql之前的文件夹,然后win+R键进入regedit,打开了注册表,找到HKEY_LOCAL_MACHINE\SYS...原创 2019-11-24 21:27:23 · 1808 阅读 · 0 评论 -
MySQL索引底层结构为什么选择B+树
MySQL官网介绍:索引是帮助mysql高效获取数据的排好序的数据结构。简而言之,索引本质是一种优化查询的数据结构。比较如下一些数据结构的索引,就可以发现其中的缘由。1.Hash索引Hash索引把数据以hash形式组织起来,因此查找某一条记录的时候,速度非常快。同时.hash算法的索引有个缺点,因为它不是按照大小排序的。所以,它无法按照范围进行查找。2.二叉树结构索引二叉树的定义:1...原创 2019-03-31 10:51:24 · 7617 阅读 · 0 评论 -
MySQL的下载与安装
对数据有了一定的了解后,与大家一起分享如何下载和安装Mysql 首先,是下载Mysql。从官网下载即可。 https://www.mysql.com/(网址) 下载步骤如下 1.进入官网; 2.找到 MYSQL Community Server 3.下拉到底层,找到自己对应的版本,进行下载即可。 博主提供博主自己下载的MySQL(有64位和32位) 链接:http://pan.b原创 2017-05-25 13:46:19 · 1202 阅读 · 0 评论 -
MySQL的左连接查询,只取出最大的一条数据
今天有个需求,是通过两张表进行查询。一对多的关系。通过一个主键,取出其中的一条。开始以为还好,直接用用了left join on进行查询。却发现了问题所在。其他的好弄。开始的写法借鉴这篇博客:https://bbs.youkuaiyun.com/topics/350134616?tdsourcetag=s_pcqq_aiomsg没能解决问题,因为取出的数据中不是我想要的最新的,而是最小的ID的那个...原创 2018-12-03 17:52:35 · 24935 阅读 · 1 评论 -
MySQL的各类小记录
在面试数据库这部分的内容的时候,很喜欢问关于sql优化的问题;下面总结一下:对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引;应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保...原创 2018-10-19 11:23:27 · 973 阅读 · 0 评论