![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SQL
文章平均质量分 88
SQL学习
宋同学shl
这个作者很懒,什么都没留下…
展开
-
MySQL原理篇 - InnoDB数据页
不同类型的页简介它是InnoDB管理存储空间的基本单位,一个页的大小一般是16KB。InnoDB为了不同的目的而设计了许多种不同类型的页,比如存放表空间头部信息的页,存放Insert Buffer信息的页,存放INODE信息的页,存放undo日志信息的页等等等等。当然了,如果我说的这些名词你一个都没有听过,就当我放了个屁吧~ 不过这没有一毛钱关系,我们今儿个也不准备说这些类型的页,我们聚焦的是那些存放我们表中记录的那种类型的页,官方称这种存放记录的页为索引(INDEX)页,鉴于我们还没有了解过索引是个什原创 2021-12-02 10:00:00 · 365 阅读 · 0 评论 -
MySQL原理篇 - Buffer pool
数据页、缓存页free链表、 flush链表、 LRU链表Chunk原创 2021-12-03 08:00:00 · 671 阅读 · 1 评论 -
MySQL原理篇 - InnoDB存储引擎架构设计
MySQL原创 2021-12-01 23:00:00 · 118 阅读 · 0 评论 -
MySQL基础 - DQL、DML、DDL、DCL、TCL
DDL原创 2021-12-01 18:30:21 · 280 阅读 · 0 评论 -
MySQL进阶 - InnoDB数据页结构
不同类型的页简介前边我们简单提了一下页的概念,它是InnoDB管理存储空间的基本单位,一个页的大小一般是16KB。InnoDB为了不同的目的而设计了许多种不同类型的页,比如存放表空间头部信息的页,存放Insert Buffer信息的页,存放INODE信息的页,存放undo日志信息的页等等等等。当然了,如果我说的这些名词你一个都没有听过,就当我放了个屁吧~ 不过这没有一毛钱关系,我们今儿个也不准备说这些类型的页,我们聚焦的是那些存放我们表中记录的那种类型的页,官方称这种存放记录的页为索引(INDEX)页,原创 2021-11-23 09:00:00 · 231 阅读 · 0 评论 -
MySQL进阶 - InnoDB记录存储结构
InnoDB页简介InnoDB是一个将表中的数据存储到磁盘上的存储引擎,所以即使关机后重启我们的数据还是存在的。而真正处理数据的过程是发生在内存中的,所以需要把磁盘中的数据加载到内存中,如果是处理写入或修改请求的话,还需要把内存中的内容刷新到磁盘上。而我们知道读写磁盘的速度非常慢,和内存读写差了几个数量级,所以当我们想从表中获取某些记录时,InnoDB存储引擎需要一条一条的把记录从磁盘上读出来么?不,那样会慢死,InnoDB采取的方式是:将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,Inn原创 2021-11-22 21:00:00 · 263 阅读 · 0 评论 -
MySQL进阶 - 字符集和比较规则
字符集和比较规则简介字符集简介我们知道在计算机中只能存储二进制数据,那该怎么存储字符串呢?当然是建立字符与二进制数据的映射关系了,建立这个关系最起码要搞清楚两件事儿: 你要把哪些字符映射成二进制数据? 也就是界定清楚字符范围。 怎么映射? 将一个字符映射成一个二进制数据的过程也叫做编码,将一个二进制数据映射到一个字符的过程叫做解码。 人们抽象出一个字符集的概念来描述某个字符范围的编码规则。比方说我们来自定义一个名称为xiaohaizi的字符集,它包含的字符范围和编码规则如原创 2021-11-19 20:00:00 · 387 阅读 · 0 评论 -
MySQL进阶 - MySQL是怎样运行的
MySQL的客户端/服务器架构以我们平时使用的微信为例,它其实是由两部分组成的,一部分是客户端程序,一部分是服务器程序。客户端可能有很多种形式,比如手机APP,电脑软件或者是网页版微信,每个客户端都有一个唯一的用户名,就是你的微信号,另一方面,腾讯公司在他们的机房里运行着一个服务器软件,我们平时操作微信其实都是用客户端来和这个服务器来打交道。比如狗哥用微信给猫爷发了一条消息的过程其实是这样的: 消息被客户端包装了一下,添加了发送者和接收者信息,然后从狗哥的微信客户端传送给微信服务器; 微原创 2021-11-19 19:00:00 · 832 阅读 · 0 评论 -
MySQL基础 - 触发器和事件
触发器我们使用MySQL的过程中可能会有下边这些需求: 在向t1表插入或更新数据之前对自动对数据进行校验,要求m1列的值必须在1~10之间,校验规则如下: 如果插入的记录的m1列的值小于1,则按1插入。 如果m1列的值大于10,则按10插入。 在向t1表中插入记录之后自动把这条记录插入到t2表。 也就是我们在对表中的记录做增、删、改操作前和后都可能需要让MySQL服务器自动执行一些额外的语句,这个就是所谓的触发器的应用场景。创建触发器我们看一下定义触发器的语句:原创 2021-11-18 10:00:00 · 2041 阅读 · 0 评论 -
MySQL基础 - 游标的使用
游标简介截止到现在为止,我们只能使用SELECT ... INTO ...语句将一条记录的各个列值赋值到多个变量里,比如在前边的get_score_data存储过程里有这样的语句:SELECT MAX(score), MIN(score), AVG(score) FROM student_score WHERE subject = s INTO max_score, min_score, avg_score;但是如果某个查询语句的结果集中有多条记录的话,我们就无法把它们赋值给某些变量了~ 所原创 2021-11-18 01:00:00 · 2727 阅读 · 1 评论 -
MySQL基础 - 自定义变量和语句结束分隔符
存储程序有时候为了完成一个常用的功能需要执行许多条语句,每次都在客户端里一条一条的去输入这么多语句是很烦的。设计MySQL的大叔非常贴心的给我们提供了一种称之为存储程序的东东,这个所谓的存储程序可以封装一些语句,然后给用户提供一种简单的方式来调用这个存储程序,从而间接地执行这些语句。根据调用方式的不同,我们可以把存储程序分为存储例程、触发器和事件这几种类型。其中,存储例程又可以被细分为存储函数和存储过程。我们画个图表示一下:别看出现了很多陌生的概念,别怕,我们后边会各个击破的。不过.原创 2021-11-17 19:12:40 · 1376 阅读 · 0 评论 -
MySQL基础 - 连接查询
再次认识关系表我们之前一直使用student_info和student_score两个表来分别存储学生的基本信息和学生的成绩信息,其实合并成一张表也不是不可以,假设将两张表合并后的新表名称为student_merge,那它应该长这样:student_merge表number name sex id_number department major enrollment_time subject score 20180101 杜子腾 .原创 2021-11-14 07:45:00 · 689 阅读 · 0 评论 -
MySQL基础 - 子查询
多表查询的需求截止到目前为止我们介绍的查询语句都是作用于单个表的,但是有时候会有从多个表中查询数据的需求,比如我们想查一下名叫'杜琦燕'的学生的各科成绩该怎么办呢?我们只能先从student_info表中根据名称找到对应的学生学号,然后再通过学号到student_score表中找着对应的成绩信息,所以这个问题的解决方案就是书写两个查询语句:mysql> SELECT number FROM student_info WHERE name = '杜琦燕';+----------+| num原创 2021-11-13 20:00:00 · 400 阅读 · 0 评论 -
MySQL基础 - 分组查询
分组数据复杂的数据统计前边介绍了一些用来统计数据的聚集函数,我们可以方便的使用这些函数来统计出某列数据的行数、最大值、最小值、平均值以及整列数据的和。但是有些统计是比较麻烦的,比如说老师想根据成绩表分别统计出'母猪的产后护理'和'论萨达姆的战争准备'这两门课的平均分,那我们需要下边两个查询:mysql> SELECT AVG(score) FROM student_score WHERE subject = '母猪的产后护理';+------------+| AVG(score) |原创 2021-11-13 08:00:00 · 475 阅读 · 0 评论 -
MySQL基础 - 表达式和函数
表达式学过小学数学的我们应该知道,将数字和运算符连接起来的组合称之为表达式,比方说这样:1 + 15 * 8我们可以将其中的数字称之为操作数,运算符可以称之为操作符。特殊的,单个操作数也可以被看作是一个特殊的表达式。在MySQL中也有表达式的概念,不过操作数和操作符的含义有了扩充。下边详细看一下。操作数MySQL中操作数可以是下边这几种类型: 常数 常数很好理解,我们平时用到的数字、字符串、时间值什么的都可以被称为常数,它是一个确定的值,比如数字1,字符串'abc',原创 2021-11-12 13:00:00 · 2490 阅读 · 0 评论 -
MySQL基础 - 带搜索条件的查询
我们上边介绍的student_info、student_score表中的记录都很少,但是实际应用中的表里可能存储几千万条,甚至上亿条记录。而且我们通常并不是对所有的记录都感兴趣,只是想查询到符合某些条件的那些记录。比如我们只想查询名字为范剑的学生基本信息,或者计算机学院的学生都有哪些什么的,这些条件也被称为搜索条件或者过滤条件,当某条记录符合搜索条件时,它将被放入结果集中。简单搜索条件我们需要把搜索条件放在WHERE子句中,比如我们想查询student_info表中名字是范剑的学生的一些信息,可以这原创 2021-11-12 08:00:00 · 1476 阅读 · 0 评论 -
MySQL基础 - 简单查询
为简单起见,我们就复用之前在数据库xiaohaizi下边创建的学生信息表student_info和学生成绩表student_score,你可能有点忘了这两个表长啥样了,我们先把两个表的结构回顾一下:学生基本信息表的结构CREATE TABLE student_info ( number INT PRIMARY KEY, name VARCHAR(5), sex ENUM('男', '女'), id_number CHAR(18), department VA原创 2021-11-11 20:00:00 · 338 阅读 · 0 评论 -
MySQL基础 - 列的属性
简单的查询和插入的语句简单的查询语句如果我们想查看某个表里已经存储了哪些数据,可以用下边这个语句:SELECT * FROM 表名;比如我们想看看前边创建的first_table表中有哪些数据,可以这么写:mysql> SELECT * FROM first_table;Empty set (0.01 sec)mysql>很遗憾,我们从来没有向表中插入过数据,所以查询结果显示的是Empty set,表示什么都没查出来~简单插入语句MySQL插入数据的原创 2021-11-11 13:00:00 · 1333 阅读 · 0 评论 -
MySQL基础 - 表的基本操作
数据库建好之后,我们就可以接着创建真正存储数据的表了。创建表的时候首先需要描述清楚这个表长什么样,它有哪些列,这些列都是用来存什么类型的数据等等,这个对表的描述称为表的结构或者定义。有了表的结构之后,我们就可以着手把数据塞到这个表里了。表中的一行叫做一条记录,一列叫做一个字段。展示当前数据库中的表下边的语句用于展示当前数据库中有哪些表:SHOW TABLES;我们的当前数据库是xiaohaizi,然后用上述语句查看下xiaohaizi数据库中都有哪些表:mysql> SHOW原创 2021-11-11 08:00:00 · 553 阅读 · 0 评论 -
MySQL基础 - 数据库的基本操作
MySQL中把一些表的集合称为一个数据库,MySQL服务器管理着若干个数据库,每个数据库下都可以有若干个表,画个图就是这样:展示数据库在我们刚刚安装好MySQL的时候,它已经内建了许多数据库和表了,我们可以使用下边这个命令来看一下都有哪些数据库:SHOW DATABASES;我自己的电脑上安装的MySQL版本是5.7.22,看一下在这个版本里内建了哪些数据库:mysql> SHOW DATABASES;+--------------------+| Da.原创 2021-11-10 20:00:00 · 132 阅读 · 0 评论 -
MySQL基础 - 数据类型
学生基本信息表学号 姓名 性别 身份证号 学院 专业 入学时间 20180101 杜子腾 男 158177199901044792 计算机学院 计算机科学与工程 2018-09-01 20180102 杜琦燕 女 151008199801178529 计算机学院 计算机科学与工程 2018-09-01 20180103 范统 男 17156319980116959X.原创 2021-11-10 14:00:00 · 1028 阅读 · 0 评论 -
Jedis入门
Jedis是Java开发Redis的语言工具包Jedis是对Redis语言的封装Jedis演示Jedis jedis = new Jedis("175.27.230.117", 6379); try { jedis.auth("12345"); jedis.select(2); System.out.println("Redis连接成功"); // String类型原创 2021-10-20 02:00:00 · 132 阅读 · 0 评论 -
MySQL事务与MVCC如何实现的隔离级别
mvvc原创 2021-10-18 18:00:00 · 89 阅读 · 0 评论 -
关系型数据库设计 - 三大范式
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。而通常我们用的最多的就是第一范式(1NF)、第二范式(2NF)、第三范式(3NF),也就是本文要讲的“三大范式”。第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。举例说明:在上面的表中,“家庭信息”和“学校信息”列均不满足原子性的要求,故不满足第一范式,调整如下:可见,调整后的每一列都是不可再分的原创 2021-10-15 07:00:00 · 281 阅读 · 0 评论 -
MySQL 基础
一、MySQL架构和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。 连接层:最上层是一些客户端和连接服务。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客原创 2021-10-13 20:55:15 · 329 阅读 · 0 评论