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 ALL

SELECT 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 NULL

UNION ALL

SELECT 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 b

ON b.`CEO` = a.`id`;

(3)求所有掌门人的平均年龄

SELECT AVG(a.`age`) FROM t_emp a INNER JOIN t_dept b

ON b.`CEO` = a.`id`;



(4)求所有人物对应的掌门名称(4种写法分析)

#1 NO3

SELECT ab.name,c.`name` ceoname FROM

(SELECT a.`name`,b.`CEO` FROM t_emp a

LEFT JOIN t_dept b ON a.`deptId`=b.`id`)ab

LEFT JOIN t_emp c ON ab.ceo=c.`id`;



#2 NO2

SELECT c.name,ab.name ceoname FROM t_emp c LEFT JOIN

(SELECT a.`name`,b.`id` FROM t_emp a

INNER JOIN t_dept b ON b.`CEO` = a.`id`)ab

ON c.`deptId`= ab.id;



#3  NO1

SELECT a.`name`,c.`name` ceoname FROM t_emp a

LEFT JOIN t_dept b  ON a.`deptId`= b.id

LEFT JOIN t_emp c ON b.`CEO`= c.`id`;



#4  NO4

SELECT a.`name`,(SELECT c.name FROM t_emp c WHERE c.id =b.`CEO`)ceoname

 FROM t_emp a

LEFT 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读写过于频繁,进而导致效率低下。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一百四十二、Linux——查看Linux服务器架构的版本类型

一、目的 查看已经安装好的Linux服务器架构的版本类型,看服务器版本是32位还是64位 而且可以区分出是kettle的文件x86或x86_64,x86是32位,而x86_64是64位 注意: 32位的查询结果为i386、i686 64位的查询结果为x86_64 二、Linu…

Java阶段五Day20

Java阶段五Day20 文章目录 Java阶段五Day20项目推进完成订单OrderServerService && MessageTransSenderRepositoryMessageTransRepoImplLocalTransactionLisetner 结算订单业务流程图远程调用 画时序图 项目推进 完成订单 通过分布式消息事务解决本地事务和发消息的一…

python+django+mysql项目实践三(用户管理)

python项目实践 环境说明: Pycharm 开发环境 Django 前端 MySQL 数据库 Navicat 数据库管理 用户列表展示 urls view models html <!DOCTYPE html> <html

MySQL 重置root 密码

5.7 版本 首先要把服务mysql57 关闭 net stop MySQL57 在安装的mysql57的程序的bin中 运行cmd&#xff08;管理员运行&#xff09; mysqld --defaults-file‘mysql存放数据的位置\my.ini’ --skip-grant-tables 上图 错误 注意&#xff1a;如果遇到mysqld: Can’t change dir…

答辩PPT怎么做?在线PPT软件哪个好?

又是一年毕业季&#xff0c;相信很多毕业生都开始准备论文答辩&#xff0c;有些同学正在为论文奋夜苦战&#xff0c;有些则是为论文答辩PPT而烦恼。做PPT要用什么软件好呢&#xff1f;这篇文章就来告诉你。 当下有很多PPT制作工具&#xff0c;其中自然也包括Office三件套。这些…

vue- form动态表单验证规则-表单验证

前言 以element官网的form表单的-动态增减表单项为例讲解表单验证规则 动态的功能就是v-model配合push v-for 便利来实现的 我们需要熟知2个知识点prop表单验证需要跟v-model绑定的值是一样的&#xff0c; 如果是一个数组便利的表单&#xff0c;那就需要绑定这个数组每一项…

【基础类】—CSS盒模型的全面认识

一、基本概念&#xff1a;标准IE模型 盒模型&#xff1a;margin border padding content 标准模型&#xff1a;将元素的宽度和高度仅计算为内容区域的尺寸&#xff08;content-box&#xff0c;默认&#xff09; 当CSS盒模型为 标准盒模型 &#xff08;box-sizing: conten…

交通运输安全大数据分析解决方案

当前运输市场竞争激烈&#xff0c;道路运输企业受传统经营观念影响&#xff0c;企业管理者安全意识淡薄&#xff0c;从业人员规范化、流程化的管理水平较低&#xff0c;导致制度规范在落实过程中未能有效监督与管理&#xff0c;执行过程中出现较严重的偏差&#xff0c;其营运车…

CSS图片放到<div>里面,自适应宽高全部显示,点击图片跳到新页面预览,点击旋转按钮图片可旋转

有一个需求是图片放到一个固定宽高的<div>里面&#xff0c;不管是横图还是竖图&#xff0c;都要全部显示出来并且保持图片的长宽比例不变形&#xff0c;点击图片可以跳到一个新页面预览&#xff0c;代码如下&#xff1a; <!DOCTYPE html> <html> <head>…

harbor搭建

回到目录 Harbor 是 VMware 公司开源的企业级 Docker Registry 项目&#xff0c;其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务 通俗的讲&#xff0c;harbor是一个私人镜像存储服务器 1 下载安装 进入官网&#xff0c;下载一个离线安装包,harbor官网下载 这…

Java基础面试题3

Java基础面试题 1&#xff1a;https://cloud.fynote.com/share/d/qPGzAVr5 2&#xff1a;https://cloud.fynote.com/share/d/MPG9AVsAG 3&#xff1a;https://cloud.fynote.com/share/d/qPGHKVsM 一、JavaWeb专题 1.HTTP响应码有哪些 1、1xx&#xff08;临时响应&#xf…

企业微信v4.1.8 版本新功能介绍

一、效率工具与基础体验优化 邮件 1、邮件安全 当邮件发件人、邮件内容存在风险时&#xff0c;将提示风险并自动隐藏邮件中的图片&#xff0c;避免轻信邮件内容。 对存在伪造风险的昵称将直接以发件地址代替展示&#xff0c;减少误导。 对邮件中的包含钓鱼欺诈、病毒或恶意软…

MySQL索引2——索引的类型

目录 索引分类总结 BTree索引结构根据存储形式分类 聚集索引&#xff08;Clustered Index&#xff09; 二级索引&#xff08;Secondary Index&#xff09; 根据索引特征分类 主键索引——一定是聚集索引 唯一索引——可以是聚集索引&#xff0c;也可以是二级索引 常规索…

【雷达通信】非相干多视处理(CSA)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

MVC配置原理

如果你想保存springboot的mvc配置并且还想自己添加自己的配置就用这个。 视图解析器原理&#xff0c;它会从IOC容器里获取配置好视图解析器的配置类里的视图解析器集合&#xff0c; 然后遍历集合&#xff0c;生成一个一个的视图对象&#xff0c;放入候选 视图里&#xff0c;…

Spring Boot集成单元测试调用dao,service

文章目录 Spring Boot集成单元测试调用dao&#xff0c;service1 添加相关依赖2 新建测试类 Spring Boot集成单元测试调用dao&#xff0c;service 1 添加相关依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-st…

理解 CSS 中的 Containing Block

前言 在开始本文之前先来看一个例子&#xff0c;下面一段简单的 html 代码&#xff0c;布局很简单&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"w…

Clickhouse 优势与部署

一、clickhouse简介 1.1clickhouse介绍 ClickHouse的背后研发团队是俄罗斯的Yandex公司&#xff0c;2011年在纳斯达克上市&#xff0c;它的核心产品是搜索引擎。我们知道&#xff0c;做搜索引擎的公司营收非常依赖流量和在线广告&#xff0c;所以做搜索引擎的公司一般会并行推…

IDEA用Gradle构建项目时,lombok插件无效的解决办法

Lombok 可用来帮助开发人员消除 Java 的重复代码&#xff0c;尤其是对于简单的 Java 对象&#xff08;POJO&#xff09;&#xff0c;比如说getter/setter/toString等方法的编写。它通过注解实现这一目的。 正确使用姿势 一、安装Lombok插件 菜单栏File -> Settings ->…

迁移学习:使用Restnet预训练模型构建高效的水果识别模型

目录 引言 1 迁移学习 1.1 什么是迁移学习 1.2 迁移学习能解决什么问题 1.3 迁移学习面临的三个问题 1.3.1 何时迁移 1.3.2 何处迁移 1.3.3 如何迁移 1.4 迁移学习的分类 1.4.1 按照学习方式的划分 1.4.2 按照使用方法的划分 2 Restnet网络 2.1 Restnet介绍 2.2 Re…