MySQL数据库高级

(1)B站视频:尚硅谷MySQL数据库高级,mysql优化,数据库优化(周阳老师):https://www.bilibili.com/video/BV1KW411u7vy?p=11

(2)B站视频:本教程主要讲授针对 Java 开发所需的 MySQL 高级知识,课程中会让大家快速掌握索引,如何避免索引失效,索引的优化策略,了解innodb和myisam存储引擎,熟悉MySQL锁机制,能熟练配置MySQL主从复制,熟练掌握explain、show profile、慢查询日志等日常SQL诊断和性能分析策略。MySQL基础教程:https://www.bilibili.com/video/av21400736?spm_id_from=333.788.b_765f64657363.1。

一、MySQL架构图

MySQL数据库高级_第1张图片

二、数据库存储引擎InnoDB与MyISAM的区别

MySQL数据库高级_第2张图片

MySQL数据库高级_第3张图片

三、手写SQL顺序与机读SQL顺序

MySQL数据库高级_第4张图片

对于人工而言,手写的SQL是这样的顺序:

MySQL数据库高级_第5张图片

对于MySQL数据库而言,它读取的顺序是这样的:

MySQL数据库高级_第6张图片

鱼骨图总结:

MySQL数据库高级_第7张图片

四、MySQL七种join连接详解之建表SQL:

(1)班级表:

CREATE TABLE `RUN_Class` (
  `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID(班级)',
  `ClassName` varchar(256) NOT NULL COMMENT '班级名称',
  `Status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '有效=1,无效=-1',
  `AddTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
  `UpdateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='班级信息表';

MySQL数据库高级_第8张图片

(2)学生表

CREATE TABLE `RUN_Student` (
  `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID(学号)',
  `Name` varchar(256) NOT NULL DEFAULT '' COMMENT '姓名',
  `ClassId` int(11) NOT NULL COMMENT '班级',
  `Status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '有效=1,无效=-1',
  `AddTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
  `UpdateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='学生信息表';

MySQL数据库高级_第9张图片

五、MySQL七种join连接详解:

MySQL数据库高级_第10张图片

(1)内连接:内连接查询出的数据是两张表的交集,即图中红色所表示的部分。

MySQL数据库高级_第11张图片

MySQL数据库高级_第12张图片

(2)左外连接:左外连接如图中红色部分的内容,即包含左边表的全部行(不管右边的表中是否存在与它匹配的行),和右边表中全部匹配的行。

MySQL数据库高级_第13张图片

MySQL数据库高级_第14张图片

(3)右外链接:右外连接如图中红色部分的内容,即包含右边表的全部行(不管左边的表中是否存在与它匹配的行),和左边表中全部匹配行。

MySQL数据库高级_第15张图片

MySQL数据库高级_第16张图片

(4)左连接:左连接如图中红色部分的内容,查询出左表独有的数据。

MySQL数据库高级_第17张图片    MySQL数据库高级_第18张图片

 解析:其实上图就是在左外连接的基础上进行的,左外连接得到了左表,但是左表里还包含了一部分左右表都具有相同数据的区域,这时需要将这部分相同数据去掉,去除的条件就是 B.key IS NULL

MySQL数据库高级_第19张图片

(5)右连接:如果看懂了上面的左连接,那么右连接大同小异,就是查询出右表独有的数据。

MySQL数据库高级_第20张图片

 解析:其实上图就是在右外连接的基础上进行的,右外连接得到了右表,但是右表里还包含了一部分左右表都具有相同数据的区域,这时需要将这部分相同数据去掉,去除的条件就是 A.key IS NULL

MySQL数据库高级_第21张图片

(6)全连接(Mysql中不支持下图写法):查询出左右两表的所有数据 。

MySQL数据库高级_第22张图片

但是!MySQL中并不支持这种写法,所以只能通过别的方法。A、B的所有:也就是A的独有+B的独有+A与B的共同拥有的数据.

Mysql中可以使用:select * from Table A left join Table B on A.Key = B.Key       (找出A的所有)

                               union            (去重+合并)

                               select * from Table A right join Table B on A.Key = B.Key     (找出B的所有)     

MySQL数据库高级_第23张图片

(7)全外连接(Mysql中不支持下图写法):左右表的共有数据之外的数据查询。

MySQL数据库高级_第24张图片

筛选出对于A表而言B为空+对于B表而言A为空的数据,MySQL中也不支持这种写法,所以只能通过别的方法。

其实全外连接也就是:A的独有+B的独有。

Mysql语法:          select * from Table A left join Table B on A.Key = B.Key  where B.Key is null      (找出A的独有)

                               union            (去重)

                               select * from Table A right join Table B on A.Key = B.Key where A.Key is null    (找出B的独有)
MySQL数据库高级_第25张图片

六、MySQL索引

(1)索引是什么?

结论:索引一方面解决where条件的查询如何使其快速,另一方面解决order by排完序之后的查询如何使其快速。 

MySQL数据库高级_第26张图片

MySQL数据库高级_第27张图片

MySQL数据库高级_第28张图片

MySQL数据库高级_第29张图片

 

 

 

MySQL数据库高级_第30张图片

表中数据达到几十万甚至数百万及行记录以上的时候才开始做优化比较合适。

explain关键字查询出10个字段属性:id、select_type、table、type、possiable_keys、key、key_len、ref、rowsextro

其中的type属性有如下7种取值:system > const > eq_ref > ref > range > index > all 

注:先完成再完美,先功能再性能。

 

 

 

 

 

 

 

你可能感兴趣的:(MySQL基础知识,数据库,mysql,java,sql,索引)