
MySQL
文章平均质量分 95
理论与实践结合,深度讲解 MySQL
沸羊羊_
如果不想成为一个碌碌无为的人,除了对浩渺星空的无穷向往,还必须具备对平庸生活的憎恶。.....
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MySQL for update 到底是 row lock / table lock
前言MySQL 在使用 for update 进行查询操作时,锁的是 row 还是 table 呢?答案见文末。本文测试的环境为 MySQL 8.0.21验证MySQL for update 时使用索引 检索数据的情况下,使用的是 row lock,而不使用索引检索数据的话,是 table lock,下面我们先来通过实验验证这个说法。打开两个MySQL连接,将其中一个连接关闭自动提交事务。-- 查询事务提交方式select @@autocommit;-- 关闭自动提交事务set autoc原创 2021-09-17 09:09:47 · 2371 阅读 · 3 评论 -
Explain你真的会用吗?
文章目录Explain的作用?idid相同id不同id相同又不同select_typeSIMPLEPRIMARYSUBQUERYDERIVEDUNIONUNION RESULTtabletypeExplain的作用?idid相同id不同id相同又不同select_typeSIMPLEPRIMARYSUBQUERYDERIVEDUNIONUNION RESULTtabletype...原创 2021-08-01 12:00:06 · 2403 阅读 · 0 评论 -
你一定要知道的SQL优化技巧
前言前面的文章介绍过了索引、锁、复制与恢复、日志等 MySQL 的底层原理,本文主要从实战的角度出发,讲解如何合理的设计查询,因为即使查询写的很糟糕,即使表结构再合理,索引再合适,也无法实现高性能。本文会介绍一些查询设计的基本原则,以及一些更深的查询优化的技巧。在优化查询前先要了解在完成一个查询的过程中,查询需要在哪些地方花费时间,包括网络、CPU计算、生成统计信息和执行计划、锁等待等操作,尤其是向存储引擎检索数据的调用操作,这些调用需要在内存操作,CPU操作和内存不足时导致的 I/O 操作上消耗时间。原创 2021-08-01 10:24:59 · 3018 阅读 · 1 评论 -
MySQL模糊查询再也不用like+%了
文章目录前言我们都知道 InnoDB 在模糊查询数据时使用 "%xx" 会导致索引失效,但有时需求就是如此,类似这样的需求还有很多,例如,搜索引擎需要根基用户数据的关键字进行全文查找,电子商务网站需要根据用户的查询条件,在可能需要在商品的详细介绍中进行查找,这些都不是B+树索引能很好完成的工作。通过数值比较,范围过滤等就可以完成绝大多数我们需要的查询了。但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较,全文索引就是为这种场景设计的。全文索引(Ful原创 2021-07-28 15:17:53 · 5003 阅读 · 19 评论 -
从理论到实战,彻底搞懂MySQL主从复制原理
文章目录前言常见主从架构模式单向主从双向主从级联主从多主一从主从原理前言MySQL 主从复制也称为 MySQL 主从同步,是构建数据库高可用集群架构的基础,我们通过为服务器配置一个或多个备库的方式来进行数据同步,复制功能不仅有利于构建高性能应用,同时也是高可用性、可扩展性、灾难恢复、备份以及数据仓库等工作的基础。复制的基本问题是解决不同服务器的数据保持同步,一台主库的数据可以同步到多台备库上,备库本身也可以被配置为另外一台服务器的主库,主库和备库之间可以有多种不同的组合方式。常见主从架构模式单向原创 2021-07-26 21:38:36 · 2144 阅读 · 0 评论 -
MySQL数据备份与恢复机制详解
文章目录前言备份冷备热备mysqldump工具前言安全管理数据库的关键是定期备份,根据数据量、MySQL服务器的数量和数据库工作负载等情况,选择最适合的备份方式。备份分为以下类型:冷备:停库,停服,备份温备:不停库,备份时锁表热备:不停库,备份时不锁表备份冷备如果可以关闭 MySQL 服务器,则可以进行物理备份。好处是可以保证数据库的完整性,备份过程简单且恢复速度相对较快。但前提是停掉MySQL服务器意味着系统需要停摆。冷备过程停掉 MySQL 服务复制 InnoDB 数据文原创 2021-07-24 16:59:04 · 3114 阅读 · 0 评论 -
详解MySQL锁
文章目录前言全局锁表级锁表锁MDL锁意向锁行级锁共享锁(S)排他锁(X)记录锁(Record Lock)间隙锁(GAP Lock)Next-Key Lock死锁如何降低死锁发生的概率前言MySQL中的锁大致分为三类:全局锁、表级锁、行锁。本文主要针对这三种锁展开叙述。关于MySQL的系列文章,请跳转至 MySQL专栏全局锁顾名思义,全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。当你需要让整个库原创 2021-07-20 15:58:55 · 1301 阅读 · 1 评论 -
简单易懂的MySQL覆盖索引、前缀索引、索引下推
文章目录前言聚集索引/非聚集索引前言聚集索引/非聚集索引原创 2021-07-19 16:36:32 · 1884 阅读 · 1 评论 -
你还不知道 BTree,B-Tree,B+Tree 的区别吗?
文章目录前言BTreeB+Tree小结前言今天来总结一下,B树、B-树、B+树,这三棵树。对于 B树和B-树,网上的说法分为两种,一种说法是B树是二叉搜索树,B-树是一种多路搜索树;另一种说法是 B树就是B-树,B-树就是B树。经过查阅资料,得出结论,后者说法是正确的。下面引用百度百科 B树 的定义:在B-树中查找给定关键字的方法是,首先把根结点取来,在根结点所包含的关键字K1,…,Kn查找给定的关键字(可用顺序查找或二分查找法),若找到等于给定值的关键字,则查找成功;否则,一定可以确定要查找的关原创 2021-07-18 20:14:39 · 2920 阅读 · 1 评论 -
彻底搞懂MySQL 的 redo log 、 binlog、undo log
文章目录前言redo logbinlogredo log 与 binlogupdate 操作流程两阶段提交undo log总结前言前面两篇文章介绍了 MySQL 的体系架构和 InnoDB 的存储结构和体系结构,今天这篇文章主要讲解 MySQL 中的一些重要 log 文件的作用。包括:redo log,binlog,undo log宏观角度理解Mysql体系架构传送门InnoDB体系架构详解传送门前面的文章讲解了 MySQL 的体系架构,所以,我们知道一条 select 语句是如何执行的。如果是原创 2021-07-18 11:19:47 · 1730 阅读 · 1 评论 -
InnoDB体系架构详解
文章目录前言InnoDB 存储结构表空间系统表空间独立表空间通用表空间undo表空间临时表空间段区页行InnoDB 体系架构内存结构前言上篇文章讲解了 MySQL 体系架构,今天讲解 MySQL 最主流的存储引擎 InnoDB 体系结构。宏观角度理解Mysql体系架构传送门InnoDB 存储结构InnoDB 逻辑存储单元主要分为:表空间、段、区、页。层级关系如下图:表空间MySQL5.7以后,表空间分为:系统表空间、独立表空间、通用表空间、undo表空间、临时表空间。系统表空间系统表空原创 2021-07-17 11:06:45 · 2565 阅读 · 0 评论 -
宏观角度理解Mysql体系架构
文章目录前言MySQL架构连接器查询缓存分析器优化器执行器存储引擎总结前言学习 MySQL 要先从全局角度进行宏观了解,再陷入细节里,这样能帮助我们更深入的理解细节部分。本文将讲解 MySQL 架构。MySQL架构大体来说,MySQL可以分为Server层和存储引擎层两部分。Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。而原创 2021-07-16 16:26:42 · 1428 阅读 · 0 评论 -
通俗易懂的Mysql的锁(全局锁、表锁、行锁)
文章目录前言全局锁表锁行锁小结前言数据库设计锁的初衷是处理并发问题,作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。全局锁顾名思义,全局锁就是对整个数据库实例加锁。Mysql 提供了一个全局读锁的方法,命令是:Flush tables with read lock (FTWRL)可以使用以下命令解锁:unlock tables;这个命令可以原创 2020-11-08 23:50:58 · 1502 阅读 · 9 评论 -
mysql索引优化原则:覆盖索引、最左前缀原则、索引下推
文章目录前言round1:覆盖索引round2:最左前缀原则前言在文章开始前,小编提出几个问题,读者可以思考一下如何回答。如果对于以下的问题,回答的模棱两可甚至根本不了解,我想这篇文章应该会合你的口味。查询数据时如何减少回表的次数?什么是“最左前缀原则”?解决了什么问题?什么是“索引下推”?这种方法带来了什么好处?通过两个alter 语句重建索引k,以及通过两个alter语句重建主键索引是否合理?round1:覆盖索引查询数据时如何减少回表的次数?回答这个问题前,我们要知道什么是回表?原创 2020-11-06 22:50:10 · 1698 阅读 · 20 评论 -
mysql 8.0.16常用基本命令
常用基本命令跳过登录验证:mysqld --console --skip-grant-tables --shared-memory登录数据库:mysql -u 用户名 -p创建用户:create user '用户名' @' %';给用户授予权限grant all privileges on *.* to 'root'%';刷新权限flush privileges;...原创 2019-11-28 18:54:43 · 408 阅读 · 11 评论 -
mysql8.0.16修改密码
修改密码种类情况一:已知旧密码,修改旧密码情况二:忘记旧密码,重置密码(这里只说明这种情况) 解决办法:情况二停止mysql服务在bin目录下输入:mysqld --console --skip-grant-tables --shared-memory(跳过权限验证,出现以下字样成功)重新打开一个cmd,到bin路径下,输入:mysql -u root -p,出...原创 2019-11-28 16:53:10 · 281 阅读 · 8 评论 -
mysql创建/更新数据库时设置自动获取时间
创建数据库时设置自动获取时间MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样。CURRENT_TIMESTAMP:第一次插入记录时获取时间戳CURRENT_TIMESTAMP on UPDATE CURRENT_TIMESTAMP:每次更新记录都更新时间戳create TABLE IF NOT EXISTS T_WorkLogInfo(userId char(18)...原创 2019-11-28 16:33:44 · 583 阅读 · 7 评论 -
mysql报错-Failed to find valid data directory.
运行环境操作系统:win10数据库:mysql.8.0.16 问题描述MYSQL服务正在启动MYSQL服务无法启动服务没有报告任何错误 解决办法/td>将安装路径下的data文件夹中文件手动清空(可能之前初始化时失败导致文件不全)进到bin路径下移除mysql服务在bin路径下输入mysqld --initialize-insecure(程序会在data文...原创 2019-11-28 16:42:32 · 1792 阅读 · 10 评论