![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
@日月空@
这个作者很懒,什么都没留下…
展开
-
MySQL流程函数(case when、if等)
函数能帮助用户做很多事情,比如说字符串的处理、数值的运算、日期的运算等,在这方面 MySQL 提供了多种内建函数帮助开发人员编写简单快捷的 SQL 语句,其中常用的函数有字符串函数、日期函数和数值函数。在 MySQL 数据库中,函数可以用在 SELECT 语句及其子句(例如 where、order by、having等)中,也可以用在 update、delete语句及其子句中。其它函数就不说了,单独来说一下流程函数。流程函数流程函数也是很常用的一类函数,用户可以使用这类函数在一个SQL语句中实现选择原创 2020-11-29 18:50:22 · 308 阅读 · 0 评论 -
MySQL常用数据类型详解
文章目录数值类型日期时间类型字符串类型不推荐存储到数据库的数据类型MySQL 提供了多种数据类型,主要包括数值型、字符串类型、日期和时间类型。数值类型数值类型:tinyint、smallint、mediumint、int/integer、bigint、float、double、decimal并增加了 bit 类型,用来存放位数据。注意:在整数类型中,如果保存的数值超出类型范围,会发生 Out of range 错误提示。为了避免此类问题发生,在选择数据类型时要根据应用的实际情况确定其取值范原创 2020-11-29 16:06:25 · 321 阅读 · 0 评论 -
MySQL事务详解
文章目录什么是事务?事务的作用事务类型事务的特性并发事务带来的问题事务的隔离级别事务控制语句:事务的生命周期事务重做日志与回滚日志Redo log (重做日志)Undo log(回滚日志)什么是事务?事务是一个最小的不可再分的工作单元,通常一个事务对应一个完整的业务的数据操作;事务内的操作要么全部成功,要么全部失败。例如银行转账:A 转账 1000 给 B,这其中要涉及检查 A 账户的余额, A 的扣款、B 的到账等一系列操作,这组操作就是一个事务。如果一切正常那就相安无事,一旦中间有某个环节异常,原创 2020-11-21 19:34:20 · 319 阅读 · 0 评论 -
MySQL锁详解
文章目录什么是锁?为什么要用锁?锁的分类锁的粒度表级锁页级锁行级锁锁兼容性共享锁排它锁InnoDB 锁类型InnoDB 加锁方法MyISAM锁类型MyISAM 加锁方法MyISAM 并发插入MyISAM 的锁调度加锁机制悲观锁乐观锁锁模式意向锁自增锁死锁死锁产生的原因死锁的现象什么是锁?锁是计算机协调多个进程或线程并发访问某一资源的机制。为什么要用锁?在数据库中,除了传统的计算资源(CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。当出现并发的时候,如果不做特殊控制的话,就会出原创 2020-11-21 07:55:42 · 203 阅读 · 0 评论 -
如何设计有效的索引
目录使用单列索引还是多列索引?选择合适的索引列顺序减少重复、冗余以及未使用的索引如果需要索引很长的字符串,此时需要考虑前缀索引不要过度索引减少索引和数据碎片索引可以让服务器快速地定位到表的指定位置,正确地创建和使用索引是实现高性能查询的基础。那么该怎么设计索引呢?在《高性能MySQL》中提到如何评价一个索引是否适合某个查询的 “三星系统”:索引将相关记录放到一起,则获得一星索引中的数据顺序和查找中的排列顺序一致,则获得二星索引中的列包含了查询需要的全部列,则获得三星使用单列索引还是多列索引原创 2020-11-15 11:52:31 · 1124 阅读 · 0 评论 -
MySQL Explain语句分析
什么是EXPLAIN?Explain 命令是查看查询优化器如何决定执行查询的主要方法。学会解释 Explain 命令输出的信息将帮助你了解 MySQL 优化器是如何工作的。什么时候使用 EXPLAIN?在工作中,经常要做一些优化工作,比如优化SQL语句。通常的操作是我们会开启慢查询,让慢查询日志去记录一些执行时间比较长的SQL语句,找出这些SQL语句后,就需要用explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有全表扫描、表如何连接及连接顺序等。所以原创 2020-11-13 09:41:14 · 640 阅读 · 0 评论 -
基于B+树聊聊回表查询、覆盖索引、最左前缀匹配原则等知识点
目录什么是回表查询?什么是覆盖索引?联合索引的最左前缀匹配原则什么情况下会发生明明创建了索引,但是执行的时候并没有通过索引呢?为什么主键通常建议使用自增id呢?什么是回表查询?所谓的回表查询,是指先定位主键值,再定位行记录,性能上较之直接查询索引树定位行记录更慢。1. 建表CREATE TABLE `user` ( `id` int(11) NOT NULL, `name` varchar(20) DEFAULT NULL, `sex` varchar(5) DEFAULT NULL,转载 2020-11-11 17:58:36 · 1921 阅读 · 0 评论 -
MySQL索引系列:聚集索引和非聚集索引
聚集索引和非聚集索引并不是一种单独的索引类型,而是一种数据存放方式。要理解聚集索引和非聚集索引,可通过对比汉语字典的索引。汉语字典提供了两类检索汉字的方式:第一类是拼音检索(前提是知道该汉字读音),比如:拼音为zheng的汉字一定排在拼音zhang的汉字后面,并且根据拼音就可以找到对应汉字的页码,这就是我们通常所说的字典序;第二类是部首笔画检索,根据笔画先找到对应汉字,然后查到汉字对应的页码。拼音检索就是聚集索引,因为存储的记录(数据库中是行数据、字典中是汉字的详情记录)是按照该索引排序原创 2020-11-11 16:19:25 · 554 阅读 · 0 评论 -
从头到尾捋一遍MySQL索引结构
原文地址从一个简单的表开始create table user( id int primary key, age int, height int, weight int, name varchar(32))engine = innoDb;相信只要入门数据库的同学都可以理解这个语句,我们也将从这个最简单的表开始,一步步地理解MySQL的索引结构。首先,我们往这个表中插入一些数据。INSERT INTO user(id,age,height,weight,na转载 2020-11-08 20:47:42 · 297 阅读 · 0 评论 -
MySQL索引系列:Btree索引和hash索引
B+tree索引B+tree索引的特点Hash索引Hash索引是根据Hash结构的定义,只需要一次运算便可以找到数据所在位置,不像B+树或者B树需要从根结点出发寻找数据,所以Hash索引的查询效率理论上要高于B+树索引,但是MySQL中并没有采用这一种索引,这是由于这种索引除查询效率之外的缺陷是十分明显的。Hash索引的特点:Hash索引包括键值、Hash码和指针;对于Hash索引中的所有列,存储引擎都会为每一行计算一个Hash码,Hash索引中存储的就是Hash码。Hash索引必须进行原创 2020-11-08 20:28:20 · 575 阅读 · 0 评论 -
MySQL索引系列:全文索引
什么是全文索引?全文索引首先是 MySQL 的一种索引类型,也是搜索引擎的关键技术。试想在1M大小的文件中搜索一个词,可能需要几秒,在100M的文件中可能需要几十秒,如果在更大的文件中搜索那么就需要更大的系统开销,这样的开销是不现实的。所以在这样的矛盾下出现了全文索引技术,有时候有人叫倒排文档技术。全文索引的作用是什么?全文索引是将存储在数据库中的大段文本中的任意内容信息查找出来的技术。既然是查找包含某些内容的文本,用 like + 通配符 或者正则表达式就可以实现模糊匹配,为什么还要全文索引?原创 2020-11-07 16:34:12 · 13786 阅读 · 0 评论 -
MySQL索引系列:索引概述
什么是索引?索引是存储引擎用于快速找到记录的一种数据结构,是一种以特定顺序保存的专用表。不过索引并不包含实体中的所有数据,而是包含那些用于定位表中行的列,以及描述这些行的物理位置的信息。要理解 MySQL 中索引是如何工作的,最简单的方法就是去看看一本书的 “索引” 部分:如果想在一本书中找到某个特定主题,一般会先看书的目录页,即 “索引”,找到对应的页码,然后就可以找到想看的内容。所有 MySQL 列类型都可以被索引,根据存储引擎可以定义每个表的最大索引数和最大索引长度,每种存储引擎(如 InnoD原创 2020-11-05 22:34:22 · 652 阅读 · 0 评论 -
Innodb表结构详解
原文地址表空间由segment、extend、page组成,其中page是InnoDB磁盘管理的最小单位(默认大小为16K)。如下图:Segment (段)常见的segment有数据段、索引段、回滚段等, 数据段为B+树的叶子节点(Leaf node segment)、索引段为B+树的非叶子节点(Non-leaf node segment)。如下图:Extend (区) 每个区大小固定为1MB,为保证区中page的连续性通常InnoDB会一次从磁盘中申请4-5个区。在默认page的大小转载 2020-11-02 21:08:11 · 570 阅读 · 0 评论 -
MySQL状态与系统变量查询命令
show status# 用来查看MySQL在运行过程中的属性状态show status;show status like '%变量%';# 查看会话状态# 查看当前会话情况show status like 'Com_%';# 查看全局会话情况show global status like 'Com_%';# 查看针对innodb存储引擎状态的统计show global status like 'Innodb_%';# 查看视图连接MySQL服务器次数show global sta原创 2020-11-01 15:10:21 · 664 阅读 · 0 评论 -
MySQL数据存储文件详解
MySQL数据库会在data目录下,以数据库为名,为每一个数据库建立文件夹,用来存储数据库中的表文件数据。不同的数据库引擎,每个表的扩展名也不一样 ,例如: MyISAM用“.MYD”作为扩展名,Innodb用“.ibd”等。".FRM"文件无论是哪种存储引擎,创建表之后就一定会生成一个以表明命名的’.frm’文件。frm文件主要存放与表相关的数据信息,主要包括表结构的定义信 息。当数据库崩溃时,用户可以通过frm文件来恢复数据表结构。Innodb存储引擎的文件:后缀为 “.ibd” 和 “.i原创 2020-11-01 09:50:06 · 1917 阅读 · 0 评论 -
MySQL使用二进制(binlog)文件恢复数据
概述项目运行过程中总会遇到一些意外,比如误操作把数据删了、表删了,甚至是把数据库删了的情况。这时为了保障用户不受影响,应该快速的恢复数据;如果没有备份数据库怎么办,别慌,我们还有二进制(binlog)日志文件。二进制(binlog)日志也可叫作变更日志,是 MySQL 中非常重要的日志。主要用于记录数据库的变化情况,即 SQL 语句的 DDL 和 DML 语句,但是不包含数据记录查询操作。语句以事件保存,它描述了数据的更改过程。环境准备创建一个用于测试的库 create database myte原创 2020-10-31 22:18:51 · 855 阅读 · 0 评论 -
MySQL日志分类详解
在任何一种数据库中,都会有各种各样的日志,记录着数据库的方方面面,以帮助数据库管理员追踪数据库曾经发生过的各种事件。MySQL也不例外。MySQL日志分类查询日志慢查询日志错误日志二进制 (binlog) 日志中继日志查询日志 查询日志主要是记录 MySQL 的查询语句 通过命令SHOW VARIABLES LIKE '%general_log%';可知,查询日志是否开启 general_log:是否开启查询日志,ON 表示开启,OFF 表示关闭 general_log_f原创 2020-10-31 18:18:18 · 546 阅读 · 2 评论 -
MySQL结构及执行流程
MySQL结构介绍 1. MySQL简化结构客户端 : 并非MySQL所独有,诸如 : 连接处理、授权认证、安全等功能均在这一层处理核心服务 : 包括查询解析、分析、优化、缓存、内置函数(比如 : 时间、数学、加密等函数),所有的跨存储引擎的功能也在这一层实现 : 存储过程、触发器、视图等存储引擎 : 负责 MySQL 中的数据存储和提取,和 Linux 下的文件系统类似,每种存储引擎都有其优势和劣势,中间的服务层通过 API 与存储引擎通信,这些 API接口 屏蔽不同存储引擎间的差异My原创 2020-10-29 20:55:27 · 292 阅读 · 2 评论 -
详解MySQL DDL语句、DML语句与DCL语句
原文地址SQL【Structure Query Language(结构化查询语言)】 分类:DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、udpat原创 2020-10-28 21:24:03 · 592 阅读 · 0 评论 -
MySQL知多少(二)---聚合函数总结
AVG() 返回某列的平均值注意:只用于单个列AVG()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个AVG()函数。NULL值AVG()函数忽略列值为NULL的行。COUNT() 返回某列的行数注意:COUNT()函数有两种使用方式。使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。使...原创 2020-03-31 07:53:54 · 211 阅读 · 0 评论 -
MySQL知多少(一)---基础问题及使用总结
建表时应该总是定义主键,为什么?虽然有些数据表结构用不上主键(比如:中间表),但是我们设计表结构的时候还是需要加上主键,因为这样可以便于以后管理和操作数据(比如:分表、加索引)定义主键的好习惯:不更新主键列中的值不重用主键列的值不在主键列使用会更改的值(例如:用用户名作为主键去标记用户,那如果用户改名的时候,就必须修改主键,并且修改相关的所有数据)SHOW 相关命令SHOW...原创 2020-03-29 08:57:18 · 246 阅读 · 0 评论