mysql高级(尚硅谷-夏磊)

news2024/10/3 4:38:02

目录

内容介绍

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

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

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

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

相关文章

IP网络广播系统草坪音箱景区系统防水石头,草坪音箱的应用

IP网络广播系统草坪音箱景区系统防水石头,草坪音箱的应用 SV-7045V是深圳锐科达电子有限公司的一款防水网络草坪音箱,具有10/100M以太网接口,可将网络音源通过自带的功放和喇叭输出播放,可达到功率20W。常用场景:公园ip草坪音箱&…

2009年上半年 软件设计师 下午试卷

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

PHP最简单自定义自己的框架数据库封装调用(五)

1、实现效果调用实现数据增删改查封装 2、index.php 入口定义数据库账号密码 <?php//定义当前请求模块 define("MODULE",index);//定义数据库 define(DB_HOST,localhost);//数据库地址 define(DB_DATABASE,aaa);//数据库 define(DB_USER,root);//数据库账号 def…

解读百威亚太2023上半年财报:啤酒大年百威如何重塑高端化之路?

随着消费者的需求提升&#xff0c;啤酒行业向高端化发展&#xff0c;其中知名度较高的百威亚太、华润啤酒、青岛啤酒、燕京啤酒、嘉士伯等品牌在高端市场持续鏖战&#xff0c;实际成果如何也可以从业绩一探究竟。 以百威亚太为例。8月3日&#xff0c;百威亚太发布2023年上半年…

腾讯云服务器购买流程_三种方法图文指南

腾讯云服务器购买流程直接在活动上成本更低&#xff0c;在云服务器CVM或轻量应用服务器页面自定义选择比较gui&#xff0c;但是自定义云服务器CPU内存带宽配置选择范围广&#xff0c;活动上只能选择固定的活动机&#xff0c;选择范围窄&#xff0c;但是云服务器成本低。腾讯云服…

【python技巧】文本文件的读写操作

【python技巧】文本文件的读写操作 0. 背景1. file库的文件操作1.1 打开文件---file.open()1.2 读取文件---file.read()1.3 写入文件---file.write()1.4 查找内容---file.seek() 2. re库的文本处理参考资料 0. 背景 最近在写后端接口的时候&#xff0c;需要对.c、.conf等类型的…

腾讯云服务器配置升级方法_CPU内存带宽存储扩大流程

腾讯云服务器CPU、内存、硬盘和公网带宽都可以升级或降低配置&#xff0c;在云服务器控制台的“资源调整”中即可操作&#xff0c;调整配置用于升级或降级CPU内存&#xff0c;调整网络可用于更改公网带宽大小&#xff0c;云硬盘扩容可用于调整硬盘大小&#xff0c;腾讯云服务器…

技术中台之困:业务需求开发背后的拖累

技术中台作为企业数字化转型的重要支撑&#xff0c;曾一度备受瞩目。然而&#xff0c;近年来&#xff0c;技术中台的声势逐渐式微&#xff0c;曾经的辉煌渐渐褪去。本文将深入探讨技术中台为何没落的原因&#xff0c;并从中汲取教训。 技术中台起源于企业数字化转型的需求&…

由于找不到msvcp100.dll无法继续执行代码怎么解决

当遇到程序无法正常运行&#xff0c;提示缺少msvcp100.dll文件时&#xff0c;最初的反应可能是困惑和不知所措。然而&#xff0c;通过修复msvcp100.dll文件&#xff0c;我发现这个问题实际上并不复杂&#xff0c;并且可以通过一些简单的步骤解决。 在修复msvcp100.dll文件的时候…

谱包络之pysptk和pyworld

谱包络之pysptk和pyworld 谱包络可以直接用于语音的合成&#xff0c;常用的两个计算谱包络的库pysptk和pyword。 先看看代码&#xff1a; 一段语音x&#xff0c;采样率16000Hz pysptk import pysptkframe_length 1024 hop_length 80 order 25 alpha 0.41 frames libro…

JavaWeb学习|JSTL表达式

1.什么是JSTL表达式&#xff1f; JSTL标签库的使用就是为了弥补HTML标签的不足;它自定义许多标签&#xff0c;可以供我们使用&#xff0c;标签的功能和Java代码一样 在JSP页面文件中使用JSTL表达式&#xff0c;首先需要引入核心标签库 同时&#xff0c;也要把JSTL的jar包在to…

家电维修小程序开发指南:从零搭建到上线

随着科技的发展和人们生活水平的提高&#xff0c;家电已经成为人们生活中不可或缺的一部分。然而&#xff0c;随之而来的是家电维修门店业务的繁忙和效率的考验。为了提高家电维修门店的效率和服务质量&#xff0c;建立一个便捷高效的小程序已成为必要的选择。 本文将介绍一个简…

轻松上手流体分析

SOLIDWORKS FloXpress 是一个流体力学应用程序&#xff0c;可计算流体是如何穿过零件或装配体模型的。 根据算出的速度场&#xff0c;可以找到设计中有问题的区域&#xff0c;以及在制造任何零件之前对零件进行改进。 SOLIDWORKS FloXpress 向导会引导您完成以下步骤&#xff1…

C#类型转换

&#x1f35f;数据类型 大体分为三个大类型&#xff1a;整型&#xff08;其中又分为有符号整型、无符号整型&#xff09;、浮点型、特殊类型 注意&#xff1a;浮点数在初始化时要在值后加上后缀&#xff0c;双精度浮点数decimal的后缀为“M”、单精度浮点数double和float的后…

配置docker,案例复现

配置docker(系统为centos) 1.检查操作系统环境: docker要求CentOS系统的内核版本高于 3.10 &#xff0c;通过 uname -r 命令查看你当前的内核版本是否支持安装docker 2.查看你是否拥有旧的版本&#xff0c;有的话卸载&#xff0c;没有的话直接略过该步骤 sudo yum remove d…

基于PaddleOCR的车牌检测识别

基于PaddleOCR的车牌检测识别 前言前提条件相关介绍PaddleOCR环境要求车牌检测识别准备数据集车牌文本检测下载预训练模型微调、训练车牌检测数据集评估训练好的模型导出模型 车牌文本识别下载预训练模型微调、训练车牌识别数据集评估训练好的模型导出模型 进行预测测试结果图 …

【Windows系统】磁盘、Partition和Volume的联系与区别

1、磁盘 Disk&#xff0c;磁盘。 以下摘自微软 磁盘设备和分区 - Win32 apps | Microsoft Learn 硬盘由一组堆积的盘片组成&#xff0c;其中每个盘片的数据都以电磁方式存储在同心圆或 轨道中。 每个盘片都有两个头&#xff0c;一个在盘片的两侧&#xff0c;在磁盘旋转时读取…

SAS-proc transpose转置

一、语法 by&#xff1a;纵向变量&#xff0c;不转置&#xff0c;保留的变量&#xff0c;by使用需要先排序。 id&#xff1a;需要转置的变量。 var&#xff1a;新数据集中的数据。 idlabel&#xff1a;转置变量的标签。 copy&#xff1a;不转置的变量直接拷贝到输出数据集中。…

Python ImportError报错:No module named ‘numpy.core_multiarray_umath‘

文章目录 背景Import 报错是版本问题吗&#xff1f;删除pandas在Visual Studio中设置Python 环境为什么要在Visual Studio IDE下继续安装Python package在Visual Studio安装numpy和pandasPYTHONPATHDebug模式下继续报错配置Release 工程优化不便之处 1不便之处 2后续 参考 背景…

Reinforcement Learning with Code【Code 5. Policy Gradient Methods】

Reinforcement Learning with Code【Code 5. Policy Gradient Methods】 This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundati…