mysql高级(尚硅谷-夏磊)

目录

内容介绍

Linux下MySQL的安装与使用

Mysql逻辑架构

Mysql存储引擎

Sql预热

索引简介


内容介绍

1、Linux下MySQL的安装与使用

2、逻辑架构

3、sql预热

Linux下MySQL的安装与使用
1、docker安装docker run -d \-p 3309:3306 \-v /atguigu/mysql/mysql8/conf:/etc/mysql/conf.d \-v /atguigu/mysql/mysql8/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=123456 \--name atguigu-mysql8 \--restart=always \mysql:8.0.29

*查看容器

2、远程连接问题

1)问题

2)解决方案

#进入容器:env LANG=C.UTF-8 避免容器中显示中文乱码

docker exec -it atguigu-mysql8 env LANG=C.UTF-8 /bin/bash

#进入容器内的mysql命令行

mysql -uroot -p

#修改默认密码校验方式

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

3、字符集

MySQL 8版本之前,默认字符集为 latin1ISO-8859-1 ,不支持中文,使用前必须设置字符集为utf8utf8mb3)或utf8mb4。从MySQL 8开始,数据库的默认字符集为 utf8mb4 ,从而避免中文乱码的问题。

4sql_mode

1)是什么

Mysql提供的sql语法规范

2)实例

CREATE DATABASE atguigudb;

USE atguigudb;

CREATE TABLE employee(id INT, `name` VARCHAR(16),age INT,dept INT);

INSERT INTO employee VALUES(1,'zhang3',33,101);

INSERT INTO employee VALUES(2,'li4',34,101);

INSERT INTO employee VALUES(3,'wang5',34,102);

INSERT INTO employee VALUES(4,'zhao6',34,102);

INSERT INTO employee VALUES(5,'tian7',36,102);

需求:查询每个部门年龄最大的人

#查询每个部门年龄最大的人(错误写法)

SELECT e.`dept`,MAX(e.`age`),e.`name` FROM employee e

GROUP BY e.`dept`;

#查询每个部门年龄最大           的人

SELECT e.`dept`,MAX(e.`age`)maxage FROM employee e

GROUP BY e.`dept`;

SELECT ee.*,e.`name` FROM employee e

INNER JOIN (

SELECT e.`dept`,MAX(e.`age`)maxage FROM employee e

GROUP BY e.`dept`

)ee ON e.`dept` =ee.dept AND e.`age`= ee.maxage;

  • ONLY_FULL_GROUP_BY对于GROUP BY聚合操作,SELECT子句中只能包含函数和 GROUP BY 中出现的字段。

Mysql逻辑架构

1、逻辑架构图

下面是MySQL5.7使用的经典架构图MySQL 8中去掉了Caches&Buffers部分:

2、客户端

MySQL服务器之外的客户端程序,与具体的语言相关,例如Java中的JDBC,图形用户界面SQLyog等。本质上都是在TCP连接上通过MySQL协议和MySQL服务器进行通信。

3、服务层

(1)连接层

第一件事就是建立 TCP 连接、身份认证、权限获取

(2)服务层

Management Serveices & Utilities 系统管理和控制工具

SQL InterfaceSQL接口:接收用户的SQL命令,并且返回用户需要查询的结果。

Parser:解析器:解析器中SQL 语句进行`词法分析、语法分析、语义分析`,并为其创建`语法树`

Optimizer:查询优化器:

 不改变查询结果前提下,调整sql顺序,生成执行计划

Caches & Buffers 查询缓存组件:在MySQL 8之后就抛弃了这个功能。

(3)引擎层

负责MySQL中数据的存储和提取,对物理服务器级别维护的底层数据执行操作,服务器通过API与存储引擎进行通信

4、存储层

所有的数据、数据库、表的定义、表的每一行的内容、索引,都是存在文件系统 上,以文件的方式存在,并完成与存储引擎的交互。

5、执行顺序

6、SQL执行流程(MySQL8)

(1).开启profiling

SET profiling = 1;

(2)显示查询`

*执行sql

SELECT * FROM atguigudb.employee;

SELECT * FROM atguigudb.employee WHERE id = 5;

*查看计划

SHOW PROFILES;

(3)查看某个查询计划流程

SHOW PROFILE cpu,block io FOR QUERY 3;

Mysql存储引擎

1、MyISAM和InnoDB的区别

Sql预热
  1. 创建测试数据
CREATE TABLE `t_dept` (`id` INT NOT NULL AUTO_INCREMENT,`deptName` VARCHAR(30) DEFAULT NULL,`address` VARCHAR(40) DEFAULT NULL,PRIMARY KEY (`id`));CREATE TABLE `t_emp` (`id` INT NOT NULL AUTO_INCREMENT,`name` VARCHAR(20) DEFAULT NULL,`age` INT DEFAULT NULL,`deptId` INT DEFAULT NULL,`empno` INT NOT NULL,PRIMARY KEY (`id`),KEY `idx_dept_id` (`deptId`)#CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `t_dept` (`id`));INSERT INTO t_dept(id,deptName,address) VALUES(1,'华山','华山');INSERT INTO t_dept(id,deptName,address) VALUES(2,'丐帮','洛阳');INSERT INTO t_dept(id,deptName,address) VALUES(3,'峨眉','峨眉山');INSERT INTO t_dept(id,deptName,address) VALUES(4,'武当','武当山');INSERT INTO t_dept(id,deptName,address) VALUES(5,'明教','光明顶');INSERT INTO t_dept(id,deptName,address) VALUES(6,'少林','少林寺');INSERT INTO t_emp(id,NAME,age,deptId,empno) VALUES(1,'风清扬',90,1,100001);INSERT INTO t_emp(id,NAME,age,deptId,empno) VALUES(2,'岳不群',50,1,100002);INSERT INTO t_emp(id,NAME,age,deptId,empno) VALUES(3,'令狐冲',24,1,100003);INSERT INTO t_emp(id,NAME,age,deptId,empno) VALUES(4,'洪七公',70,2,100004);INSERT INTO t_emp(id,NAME,age,deptId,empno) VALUES(5,'乔峰',35,2,100005);INSERT INTO t_emp(id,NAME,age,deptId,empno) VALUES(6,'灭绝师太',70,3,100006);INSERT INTO t_emp(id,NAME,age,deptId,empno) VALUES(7,'周芷若',20,3,100007);INSERT INTO t_emp(id,NAME,age,deptId,empno) VALUES(8,'张三丰',100,4,100008);INSERT INTO t_emp(id,NAME,age,deptId,empno) VALUES(9,'张无忌',25,5,100009);INSERT INTO t_emp(id,NAME,age,deptId,empno) VALUES(10,'韦小宝',18,NULL,100010);

2、常见七种JOIN查询

(1)查询所有有部门的员工信息以及他所在的部门信息SELECT * FROM t_emp a INNER JOIN  t_dept b ON a.`deptId` = b.`id`;(2)需求2:查询所有用户,并显示其部门信息(如果员工没有所在部门,也会被列出) => 查询A的全集SELECT * FROM t_emp a LEFT JOIN t_dept b ON a.`deptId`= b.`id`;(3)需求3:列出所有部门,并显示其部门的员工信息(如果部门没有员工,也会被列出)=> 查询B的全集SELECT * FROM t_dept b LEFT JOIN t_emp a ON a.`deptId`= b.`id`;(4)**需求4:**查询`没有加入任何部门的员工`SELECT * FROM t_emp a LEFT JOIN t_dept b ON a.`deptId`= b.`id` WHERE b.`id` IS NULL;(5)查询没有任何员工的部门SELECT * FROM t_dept b LEFT JOIN t_emp a ON a.`deptId`= b.`id`WHERE a.`id` IS NULL;(6)查询所有员工和所有部门 => AB全有SELECT a.*,b.* FROM t_emp a LEFT JOIN t_dept b ON a.`deptId`= b.`id`UNION ALLSELECT a.*,b.* FROM t_dept b LEFT JOIN t_emp a ON a.`deptId`= b.`id`WHERE a.`id` IS NULL;(7)查询没有加入任何部门的员工,以及查询出部门下没有任何员工的部门SELECT a.*,b.* FROM t_emp a LEFT JOIN t_dept b ON a.`deptId`= b.`id`WHERE b.`id` IS NULLUNION ALLSELECT a.*,b.* FROM t_dept b LEFT JOIN t_emp a ON a.`deptId`= b.`id`WHERE a.`id` IS NULL;

3、修改表,增加难度

(1)增加掌门人字段ALTER TABLE t_dept ADD CEO INT(11);UPDATE t_dept SET CEO=2 WHERE id=1;UPDATE t_dept SET CEO=4 WHERE id=2;UPDATE t_dept SET CEO=6 WHERE id=3;UPDATE t_dept SET CEO=8 WHERE id=4;UPDATE t_dept SET CEO=9 WHERE id=5;(2)求各个门派对应的掌门人SELECT * FROM t_emp a INNER JOIN t_dept bON b.`CEO` = a.`id`;(3)求所有掌门人的平均年龄SELECT AVG(a.`age`) FROM t_emp a INNER JOIN t_dept bON b.`CEO` = a.`id`;(4)求所有人物对应的掌门名称(4种写法分析)#1 NO3SELECT ab.name,c.`name` ceoname FROM(SELECT a.`name`,b.`CEO` FROM t_emp aLEFT JOIN t_dept b ON a.`deptId`=b.`id`)abLEFT JOIN t_emp c ON ab.ceo=c.`id`;#2 NO2SELECT c.name,ab.name ceoname FROM t_emp c LEFT JOIN(SELECT a.`name`,b.`id` FROM t_emp aINNER JOIN t_dept b ON b.`CEO` = a.`id`)abON c.`deptId`= ab.id;#3  NO1SELECT a.`name`,c.`name` ceoname FROM t_emp aLEFT JOIN t_dept b  ON a.`deptId`= b.idLEFT JOIN t_emp c ON b.`CEO`= c.`id`;#4  NO4SELECT a.`name`,(SELECT c.name FROM t_emp c WHERE c.id =b.`CEO`)ceonameFROM t_emp aLEFT JOIN t_dept b ON a.`deptId`=b.`id`;

索引简介

1、是什么

索引(Index)是帮助MySQL高效获取数据的数据结构。

排好序的快速查找数据结构

2、索引优缺点

(1)优点:查询快、排序快

(2)缺点:所有写操作变慢

                 占用大量磁盘空间

3、索引分类

  • 从功能逻辑上划分,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引
  • 按照作用字段个数划分,索引可以分为单列索引和联合索引
  • 按照物理实现方式划分 ,索引可以分为 2 种,分别是聚簇索引和非聚簇索引

4、树

(1)二叉树

对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。

*最好情况

*最坏情况

(2)平衡二叉树(AVL)

具有以下特点:

  • 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1
  • 并且左右两个子树都是一棵平衡二叉树。

缺点

那么磁盘的IO次数和索引树的高度是相关的。平衡二叉树由于树深度过大而造成磁盘IO读写过于频繁,进而导致效率低下。

解决问题,可以使用平衡三叉树

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/23086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VGG卷积神经网络-笔记

VGG卷积神经网络-笔记 VGG是当前最流行的CNN模型之一, 2014年由Simonyan和Zisserman提出, 其命名来源于论文作者所在的实验室Visual Geometry Group。 测试结果为: 通过运行结果可以发现,在眼疾筛查数据集iChallenge-PM上使用VGG…

[LeetCode]链表相关题目(c语言实现)

文章目录 LeetCode 203. 移除链表元素LeetCode 237. 删除链表中的节点LeetCode 206. 反转链表ⅠLeetCode 92. 反转链表 II思路 1思路 2 LeetCode 876. 链表的中间结点剑指 Offer 22. 链表中倒数第k个节点LeetCode 21. 合并两个有序链表LeetCode 86. 分隔链表LeetCode 234. 回文…

flask-----蓝图

1.引入蓝图 flask都写在一个文件中,项目这样肯定不行,会导致循环导入的问题,分目录,分包,使用蓝图划分目录。 2.使用蓝图 步骤如下: -1 实例化得到一个蓝图对象-order_blueBlueprint(order,__name__,tem…

Pytorch入门学习——快速搭建神经网络、优化器、梯度计算

我的代码可以在我的Github找到 GIthub地址 https://github.com/QinghongShao-sqh/Pytorch_Study 因为最近有同学问我如何Nerf入门,这里就简单给出一些我的建议: (1)基本的pytorch,机器学习,深度学习知识&a…

C语言----字节对齐

一:字节对齐的概念 针对字节对齐,百度百科的解释如下: 字节对齐是字节按照一定规则在空间上排列,字节(Byte)是计算机信息技术用于计量存储容量和传输容量的一种计量单位,一个字节等于8位二进制数,在UTF-8编…

ChatGPT在工作中的七种用途

1. 用 ChatGPT 替代谷歌搜索引擎 工作时,你一天会访问几次搜索引擎?有了 ChatGPT,使用搜索引擎的频率可能大大下降。 据报道,谷歌这样的搜索引擎巨头,实际上很担心用户最终会把自己的搜索工具换成 ChatGPT。该公司针对…

首批获得金融级行业云平台认证,天翼云深耕行业云

云计算下半场看什么? 无疑是金融、政务、制造等传统政企用户的上云与用云。随着数字经济发展和产业数字化的提速,上云已是政企用户推动其数字化转型不断深入的重要抓手,成为不可阻挡的趋势。 与互联网用户相比,政企用户上云极为…

数据库的约束 详解

一、约束的概述 1.概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。 2.目的:保证数据库中数据的正确、有效性和完整性。 3.分类: 约束描述关键字非空约束限制该字段的数据不能为nullNOT NULL唯一约束保证该字段的所有数据都是唯一、不…

Mybatis实现JsonObject对象与JSON之间交互

项目中使用PostGresql数据库进行数据存储,表中某字段为Json类型,用于存储Json格式数据。PG数据库能够直接存储Json算是一大特色,很多特定情境下使用直接存储Json字段数据能够大量节省开发时间,提高后台数据查询和转换效率。 1、基…

微信小程序如何引入Iconfont

在小程序中引入 Iconfont 可以通过以下步骤进行操作: 打开 Iconfont 网站(https://www.iconfont.cn/)并登录账号,创建一个项目并添加所需的图标到项目中。 在项目中选中需要使用的图标,点击右上角的 “下载代码” 按钮…

Spring Boot 中自动装配机制的原理

问题描述 自动装配,简单来说就是自动把第三方组件的 Bean 装载到 Spring IOC 器里面,不需 要开发人员再去写 Bean 的装配配置。 在 Spring Boot 应用里面,只需要在启动类加上SpringBootApplication 注解就可以实现自动装配。 SpringBootAppli…

【机器学习】对 MLOps 的友好的介绍(MLOps1)

一、说明 我对 MLOps 感兴趣已经有一段时间了。我第一次从机器学习工程师那里了解到它,由于我当时还是一名博士生,我并不知道它的存在。然而,我的好奇心被激起了,我开始了解它。回想起来,我很后悔没有早点了解它&#…

云原生应用里的服务发现

服务定义: 服务定义是声明给定服务如何被消费者/客户端使用的方式。在建立服务之间的同步通信通道之前,它会与消费者共享。 同步通信中的服务定义: 微服务可以将其服务定义发布到服务注册表(或由微服务所有者手动发布)…

视频添加字幕

1、依靠ffmpeg 命令 package zimu;import java.io.IOException;public class TestSrt {public static void main(String[] args) {String videoFile "/test/test1.mp4";String subtitleFile "/test/test1.SRT";String outputFile "/test/testout13…

Redis入门

0目录 1.Redis入门 2.Redis定义;特点及数据类型 3.Value为List类型 4.Value值类型为Set 5.Value值类型为Hash 6.Value值类型为Zset 1.Redis入门 Redis入门 解压包,运行redis-server.exe 安装可视化软件测试链接 命名测试链接 点击确定 2.Redis…

ResNet50卷积神经网络输出数据形参分析-笔记

ResNet50卷积神经网络输出数据形参分析-笔记 ResNet50包含多个模块,其中第2到第5个模块分别包含3、4、6、3个残差块 5049个卷积(3463)*31和一个全连接层 分析结果为: 输入数据形状:[10, 3, 224, 224] 最后输出结果:linear_0 [10,…

java使用openOffice将excel转换pdf时,将所有列显示在一页

1.接上文,格式转换的基础问题已解决,但还有些细节问题需要单独处理,如excel转换至pdf时,如何将所有列显示在一页的问题,此问题大家都有遇到,解决方案也比较多,我也尝试过重写某类,来…

Java基础面试题1

Java基础面试题 一、面向对象和集合专题 1. 面向对象和面向过程的区别 面向过程:是分析解决问题的步骤,然后用函数把这些步骤一步一步地实现,然后在使用的时候一一调用则可。性能较高,所以单片机、嵌入式开发等一般采用面向过程…

Stable diffusion 三大基础脚本 提示词矩阵,载入提示词,XYZ图表讲解

目录 0.本章讲解 1.提示词矩阵(prompt matrix) 1.2.提示词矩阵功能选项 1.2.1.把可变部分放在提示词文本的开头 1.2.2.为每张图片使用不同随机种子 1.2.3.选择提示词 1.2.4.选择分割符 1.2.5.宫格图边框(像素) 2.从文本框或文件载入提示词(Pro…

获取k8s scale资源对象的命令

kubectl get --raw /apis/<apiGroup>/<apiVersion>/namespaces/<namespaceName>/<resourceKind>/<resourceName>/scale 说明&#xff1a;scale资源对象用来水平扩展k8s资源对象的副本数&#xff0c;它是作为一种k8s资源对象的子资源存在&#xf…