登录
转载

MYSQL基础学习

发布于 2021-04-06 阅读 69
  • 数据库
  • SQL
转载

MYSQL基础学习

一、表文件数据行管理

  • 删除一个表文件

    drop table 表文件名

  • 查看表文件字段信息

    show create table

  • 为表文件添加字段

    alter table 表名 add 新字段名 数据类型;

  • 删除表文件字段

    alter table 表名 drop 字段名

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ogk9XOK5-1616938260681)(C:\Users\豆豆\AppData\Roaming\Typora\typora-user-images\image-20210328193751805.png)]

  • 二、临时表

    作用:

    ​ 每个查询命令执行时,实际上操作都是上一个查询命令生成的临时表

    生命周期:

    在当前查询命令执行完毕后,Mysql服务器自动将上一个查询命令生成的临时表从内存中销毁。导致用户最终看到的临时表只能查询语句中,最后一个查询生成的临时表

    七个查询命令与临时表的关系

    from——>where——>group by——>having——>select——>order by——>limit
    
    
    • 七个查询命令中,只有from命令不需要操作临时表,它是将硬盘上表文件加载到内存中生成第一个临时表,剩下的六个查询命令操作的都是上一个查询命令生成的临时表
    • 七个查询命令中,只有GRIUOP BY 命令在执行完毕之后,才有机会在内存中生成多个临时表,其他五个只能生成一个临时表
    • 七个查询命令中,只有HAVING命令在执行完毕后,不会生成新的临时表。它是负责将GROUP BY生成的临时表中不满足条件的临时表从内存中进行删除处理

    三、like 模糊查询

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PNbzQ7yN-1616938260684)(C:\Users\豆豆\AppData\Roaming\Typora\typora-user-images\image-20210325170536984.png)]

    四、聚合函数

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kRTxloni-1616938260687)(C:\Users\豆豆\AppData\Roaming\Typora\typora-user-images\image-20210325172737814.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jSC047Hj-1616938260690)(C:\Users\豆豆\AppData\Roaming\Typora\typora-user-images\image-20210325172836992.png)]

    五、group by

    • 执行原理:group by 执行时,首先根据分组字段数据种类,将临时表数据行进行分类。然后将聚友相同特征的数据行读取出来保存到一个全新临时表

    • 七个查询命令中,只有group by 在执行完毕后,有机会一次生成多个临时表

    • 多字段分组时,分组字段出现顺序对于最终查询结果没有任何影响

      Group by deptno,job与group by job,deptno

    • 多字段分组时,DROUP by 一次只能依据一个分组字段进行分组

      Group by deptno,job,此时group by需要直接两次

    • 多字段分组时,从第二个分组字段开始,操作的上一个分组字段生成的临时表

      Group by deptno,job,当执行Group by job时,操作临时表是由Group by deptno来生成的

    六、having

  • 执行原理:

    Having在group by 之后执行的。负责将group by临时表中不满足条件的从内存删除

  • 七个查询命令中,只有having在执行完毕后不会生成全新临时表

  • 七、Select

    执行原理:

    • 执行特征与提供临时表的命令有关
    • 如果临时表由from或者where提供,此时其只面对一个临时表。此时将指定字段下所有的内容读取出来生成一个全新的临时表
    • 如果临时表由group by提供,则可能面对多个临时表
      • Select将依次操作每个临时表
      • 在操作临时表时,指挥读取指定字段下第一个数据
      • 最后从多个临时表读取数据合成一列保存到一个全新的临时表

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8kj32e6c-1616938260695)(C:\Users\豆豆\AppData\Roaming\Typora\typora-user-images\image-20210325210205048.png)]

    八、order by

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-heQUX4j3-1616938260696)(C:\Users\豆豆\AppData\Roaming\Typora\typora-user-images\image-20210326090328972.png)]

    执行原理:负责将select生成的临时表数据行进行重新排序,然后将排序后数据行保存到一个全新临时表中

    九、JOIN命令

    • 将两个表文件数据沿着水平方向进行拼接,拼接后数据行存在内存的一个临时表

    • 命令格式 FROM 一方表 JION 多方表

      ​ FROM 多方表 JION 一方表

    • JION两边出现表位置,对于最终查询结果没有任何影响

    • JION生成临时表字段由一方表字段和多方表字段相加而来

    • JION生成临时表字段由表名.字段名组成,防止在同一个临时表出现相同字段名

    • JION生成临时表数据行由一方表每一个数据和与多方表所有数据行拼接而成

    • JION生成临时表必然存在【脏数据行】。其对后续统计分析带来巨大错误,因此在JOIN工作完毕后,必须将【合法数据行】从当前临时表读取出来存放一个全新临时表

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Aa9zC6jO-1616938260697)(C:\Users\豆豆\AppData\Roaming\Typora\typora-user-images\image-20210326103550045.png)]

    十、多表查询

    连接查询过滤方案

    前提:

    Join生成临时表必然存在【脏数据行】,对后续操作带来巨大影响

    因此在join临时表生成之后,必须将【合法数据行】与【脏数据行】进行剥离,这个行为称之为

    【连接查询过滤方法】

    连接查询过滤方案分类:

  • 内连接过滤方案

    • 内连接过滤方案(不存在了明显的【外键字段】)非 等值连接
    • 内连接过滤方案(存在了明显的【外键字段】)等值 连接
  • 外连接过滤方案

    • 角色划分:

      • 需要被帮助表(主表)
      • 不要被帮助表(副表)
    • 原理

      如果主表中某数据行与副表所有的数据行都无法拼接为合法数据。此时应该将这个数据作为一个独立的数据行存入到新的临时表。

    左连接、右连接

    联合查询合并方案
  • 要求参与合并的两个临时表的字段结构必须保持一致【字段个数,字段类型顺序】
  • 将两个临时表数据行沿着垂直方向堆砌到同一个临时表
  • 联合查询生成临时表的字段只能来自于【第一个临时表字段】
  • UNION命令在执行时,自动将两个临时表内容相同数据行进行过滤,类似于Java中Set集合
  • UNION ALL命令在执行时,不会将临时表重复的数据进行过滤
  • 十一、子查询

    定义:

    查询时无法从当前临时表得到需要的数据,此时Mysql服务器允许开发人员通过一个【完整查询语句】从别处得到需要数据,从而保证查询正常执行。

    十二、数据类型

    字符串类型:

    char 与 varchar的区别

    varchar:定长,可变字符串
    	定长:当前字段可以存储的字符串个数是固定的
    	ename varchar(3), 3表示ename字段可以存储三个英文字符或者三个中文汉字
    	可变:insert into test1 values('abc') #硬盘 【a】【b】【c】
    		  insert into test1 values('ef') #硬盘 【e】【f】
    char(m):定长不可变字符串
        不可变: sex字段在硬盘上存储字符空间是固定的
    	sex char(1) #1表示sex字段可以存储1个英文字母或则1个中文
    	 sex char(3)
    	 insert into test1 values('abc') 【a】 【b】 【c】
    	 insert into test1 values('ef') 【e】 【f】 【空格】
    针对char类型字段进行数据读取时,MySql服务器自动将字符串中【结尾处空格去掉】
    如果插入字符串以空格结尾,不要添加到由char类型修饰的字段
    
    
    

    评论区

    零00
    1粉丝

    时光荏苒,我自清欢

    0

    0

    2

    举报