名表网站,wordpress上传到哪里,大型做网站,sae wordpress升级目录
内容介绍
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/my…目录
内容介绍
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_PASSWORD123456 \--name atguigu-mysql8 \--restartalways \mysql:8.0.29 *查看容器 2、远程连接问题 1问题 2解决方案 #进入容器env LANGC.UTF-8 避免容器中显示中文乱码 docker exec -it atguigu-mysql8 env LANGC.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 从而避免中文乱码的问题。 4、sql_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中去掉了CachesBuffers部分 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预热 创建测试数据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.idWHERE a.id IS NULL;6查询所有员工和所有部门 AB全有SELECT a.*,b.* FROM t_emp a LEFT JOIN t_dept b ON a.deptId b.idUNION ALLSELECT a.*,b.* FROM t_dept b LEFT JOIN t_emp a ON a.deptId b.idWHERE a.id IS NULL;7查询没有加入任何部门的员工以及查询出部门下没有任何员工的部门SELECT a.*,b.* FROM t_emp a LEFT JOIN t_dept b ON a.deptId b.idWHERE b.id IS NULLUNION ALLSELECT a.*,b.* FROM t_dept b LEFT JOIN t_emp a ON a.deptId b.idWHERE a.id IS NULL; 3、修改表增加难度 1增加掌门人字段ALTER TABLE t_dept ADD CEO INT(11);UPDATE t_dept SET CEO2 WHERE id1;UPDATE t_dept SET CEO4 WHERE id2;UPDATE t_dept SET CEO6 WHERE id3;UPDATE t_dept SET CEO8 WHERE id4;UPDATE t_dept SET CEO9 WHERE id5;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.deptIdb.id)abLEFT JOIN t_emp c ON ab.ceoc.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.deptIdb.id; 索引简介 1、是什么 索引Index是帮助MySQL高效获取数据的数据结构。 排好序的快速查找数据结构 2、索引优缺点 1优点查询快、排序快 2缺点所有写操作变慢 占用大量磁盘空间 3、索引分类 从功能逻辑上划分索引主要有 4 种分别是普通索引、唯一索引、主键索引、全文索引。按照作用字段个数划分索引可以分为单列索引和联合索引。按照物理实现方式划分 索引可以分为 2 种分别是聚簇索引和非聚簇索引。4、树 1二叉树 对于二叉排序树的任何一个非叶子节点要求左子节点的值比当前节点的值小右子节点的值比当前节点的值大。 *最好情况 *最坏情况 2平衡二叉树AVL 具有以下特点 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1并且左右两个子树都是一棵平衡二叉树。缺点 那么磁盘的IO次数和索引树的高度是相关的。平衡二叉树由于树深度过大而造成磁盘IO读写过于频繁进而导致效率低下。 解决问题可以使用平衡三叉树