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,并将结果返回。