MySQL入门

1.什么是MySQL

  MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

  数据库的本质是一个文件系统  数据库 中记录是有行有列的数据库就是关系型数据库 原生数据中 Oracle MySQL强大 ,不过一般使用MySQL数据库。

 

2.为什么要使用MySQL

  1. 由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。
  2. MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择
  3. 首先究正你的一个印象:MySQL功能也很强大,只是对于可视化界面操作工具少,所以给很我初学者造成难上手的印象。
  4.它的优点还有:开源,免费,支持非WINDOWS操作系统(并且运行速度比在WINDOWS上还要快),速度快,二次开发(除有需要特定应用,一般是不需要二次开发的)。
  5. 大公司更注重版权,开发人员也不能随便用盗版,所以,如果全部用正版数据库,肯定增加成本的。

 

3.什么是数据库

  数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以通过SQL对数据库中的数据进行增加,修改,删除及查询操作。

4.SQL语句

  1. DDL 定义语句 create alter drop
  2. DML 操控语句 insert delete update 
  3. DCL 控制语句 grant 创建用户 
  4. DQL 查询记录  select from where 

  

  4.1 sql语句示范

    查看表

    1. 查看数据库中的所有表:show tables;

    2. 查看表结构:desc 表名;

    删除表

    drop table 表名;

    修改表

    1. alter table 表名 add 列名 类型(长度) 约束; --修改表添加列.

    2. alter table 表名 modify 列名 类型(长度) 约束; --修改表修改列的类型长度及约束.

    3. alter table 表名 change 旧列名 新列名 类型(长度) 约束; --修改表修改列名.

    4. alter table 表名 drop 列名; --修改表删除列.

    5. rename table 表名 to 新表名; --修改表名

    6. alter table 表名 character set 字符集; --修改表的字符集

    新增

    1. insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..); -- 向表中插入某些列

    2. insert into 表 values (值1,值2,值3..); --向表中插入所有列

    3. insert into 表 (列名1,列名2,列名3..) values select (列名1,列名2,列名3..) from 表

    4. insert into 表 values select * from 表

    修改
    1. update 表名 set 字段名=值,字段名=值;

    2. update 表名 set 字段名=值,字段名=值 where 条件;

    删除
    delete from 表名 [where 条件];

    分组

    select  cid,count(*) from product group by cid  select查出的列(聚合函数除外)必须出现在group by 中

5.sql的执行顺序

  3.1 from

    第一步就是选择出from关键词后面跟的表,这也是sql执行的第一步:表示要从数据库中执行哪张表。

     实例说明:在这个例子中就是首先从数据库中找到表T

  3.2 join on 

     join是表示要关联的表,on是连接的条件。通过from和join on选择出需要执行的数据库表T和S,产生笛卡尔积,生成T和S合并的临时中间表Temp1。on:确定表的绑定关系,通过on产生临时中间表Temp2.

     实例说明:找到表S,生成临时中间表Temp1,然后找到表T的id和S的id相同的部分组成成表Temp2,Temp2里面包含着T和Sid相等的所有数据

  3.3 where

     where表示筛选,根据where后面的条件进行过滤,按照指定的字段的值(如果有and连接符会进行联合筛选)从临时中间表Temp2中筛选需要的数据,注意如果在此阶段找不到数据,会直接返回客户端,不会往下进行.这个过程会生成一个临时中间表Temp3。

     实例说明:在temp2临时表集合中找到T表的name="Yrion"的数据,找到数据后会成临时中间表Temp3,temp3里包含name列为"Yrion"的所有表数据

  3.4 group by 

     group by是进行分组,对where条件过滤后的临时表Temp3按照固定的字段进行分组,产生临时中间表Temp4,这个过程只是数据的顺序发生改变,而数据总量不会变化,表中的数据以组的形式存在

     实例说明:在temp3表数据中对mobile进行分组,查找出mobile一样的数据,然后放到一起,产生temp4临时表。

  3.5 select

     对分组聚合完的表挑选出需要查询的数据,如果为*会解析为所有数据,此时会产生中间表Temp6

     实例说明:在此阶段就是对temp5临时聚合表中S表中的id进行筛选产生Temp6,此时temp6就只包含有s表的id列数据,并且name="Yrion",通过mobile分组数量大于2的数据

  3.6 order by 

     会根据Temp7进行顺序排列或者逆序排列,然后插入临时中间表Temp8,这个过程比较耗费资源

     实例说明:这段会将所有temp7临时表中的数据按照创建时间(create_time)进行排序,这个过程也不会有列或者行损失

  3.7 limit

     limit对中间表Temp8进行分页,产生临时中间表Temp9,返回给客户端。

     实例说明:在temp7中排好序的数据,然后取前五条插入到Temp9这个临时表中,最终返回给客户端

6.常用的的执行顺序

    1. FROM : 对FROM左边的表和右边的表计算笛卡尔积,产生虚表VT1;
    2. ON : 对虚拟表VT1进行ON筛选,只有那些符合条件的行才会被记录在虚拟表VT2中;
    3. JOIN :如果是OUT JOIN,那么将保留表中(如左表或者右表)未匹配的行作为外部行添加到虚拟表VT2中,从而产生虚拟表VT3;
    4. WHERE :对虚拟表VT3进行WHERE条件过滤,只有符合的记录才会被放入到虚拟表VT4;
    5. GROUP BY:根据GROUP BY子句中的列,对虚拟表VT4进行分组操作,产生虚拟表VT5;
    6. CUBE|ROLLUP:对虚拟表VT5进行CUBE或者ROLLUP操作,产生虚拟表VT6;
    7. HAVING :对虚拟表VT6进行 HAVING 条件过滤,只有符合的记录才会被插入到虚拟表VT7中;
    8. SELECT :执行SELECT操作,选择指定的列,插入到虚拟表VT8中;
    9. DISTINCT :对虚拟表VT8中的记录进行去重,产生虚拟表VT9;
    10. ORDER BY :将虚拟表VT9中的记录按照进行排序操作,产生虚拟表VT10;
    11. LIMIT :取出指定行的记录,产生虚拟表VT11,并将结果返回。

 

 

原文地址:https://www.cnblogs.com/HouGuangJun/p/12257677.html