简明:本文详细记录个人学习MySQL数据库的知识总结,包括常用SQL语句的理解、多表查询、事务、索引和表设计等等内容。
(以后学习所遇到的问题,将会持续补充在本文.........)
(个人记录学习总结内容,若出现错误/改进地方,请指出/分享,共同学习进步!!!)
一、MySQL数据库基础知识
1、简要
数据库中最基本的单元:表table
行(row):称为数据/记录 列(column):称为字段
数据库:DataBase,简称DB,存储数据的仓库,仓库中一堆文件,文件中的数据以一定的格式存储。
数据库管理系统:DataBase Management System,简称DBMS,对数据库中的数据进行增删改查。
常见的数据库管理系统:MySQL、Oracle、MS、 SqlServer、BD2、sybase等等。
SQL:结构化查询语言,学习SQL语句,DBMS负责执行SQL语句,对DB中的数据进行增删改查。
2、启动与关闭MySQL服务
注意:只有启动服务,才能连接得上MySQL数据库。
启动服务:net start mysql 关闭服务:net stop mysql
登录MySQL数据库:mysql -u(用户名) -p(密码)
3、MySQL常用命令
注意:MySQL语句执行时,必须以 ";" 结尾,语句可以换行编写。
退出Mysql:exit
查看Mysql中有哪些数据库:show databases; (mysql默认自带了4个数据库)
使用数据库:use 对应数据库名字;
创建数据库:create database 新建数据库名字;
查看数据库下的表:show tables;
查看Mysql数据库的版本号:select version();
查看当前所使用的数据库:select database();
4、SQL语句分类
DQL(数据查询语言):凡是带有select关键字都是查询语句。
select......
DML(数据操作语言):对表中的数据进行增删改查都是DML。
insert 增 、 delete 删 、 update 改
DDL(数据定义语言):对表的结构进行操作,凡是带有create、drop、alter都是DLL。
create 新建 、drop 删除 、 alter 修改
TCL(事务控制语言):commit 事务提交 、 事务回滚 rollback
DCL(数据控制语言):grant 授权 、 revoke 撤销权限
二、数据库中数据的操作(单表)
简明:此部分内容并非详细说明CRUD操作,只是罗列个人在实际操作中遇到较容易遗忘的地方。
1、简单查询( 起别名情况 )
# as可以省略,起别名只是在最终显示结果改变,原字段不变
select name as "地点名称" from city;
2、条件查询( 排序情况 )
执行顺序:from ----> where -----> select ------> order by
( 理解:来自哪张表,查询条件是什么,进行查询,最后排序 )
# 来自city表,(没有查询条件),查询所有字段,最终以provinceid字段进行降序
select * from city order by provinceid desc;
3、分组函数(多行处理函数)
特点:输入多个,输出一个;多行(多条)数据,最终只输出一个数据结果
注意:分组函数不能直接使用在where子句中,必须先进行分组。
(1)count -----------> 计算总行数(记录数),不包括Null字段
4、分组查询(先进行分组,然后操作每一组数据)
执行顺序:from ----> where -----> group by --------> select ------> order by
#来自sale表,(无查询条件),按照gid字段分组,查询gid、nums(对该字段求和)字段,最终结果以sum(nums)字段降序(默认asc)
select gid,sum(nums) from sale group by gid order by sum(nums);
5、单表查询总结
SQL语句:select ....... from ...... where ........ group by ........ having ....... order by
执行顺序:from ----> where ----> group by -----> having -----> select -----> order by
理解:来自哪张表,查询条件是什么,按照哪个字段分组,分组后过滤一下,查询哪些字 段,最终结果按照哪些字段排序
三、数据库中数据的查询操作(多表)
简明:多张表联合起来查询数据,也称为连接查询
根据表的连接方式分为:内连接、外连接
内连接:等值连接、非等值连接、自连接(两张表的匹配是精确的,平等关系)
外连接:左外连接、右外连接(两张表有主次关系:将主表全部数据查出来的同时,附带查询两张表之间满足条件的数据)
1、笛卡尔积现象
简明:两张表连接在没有任何限制条件下,一张表的一条记录会对应另一张表的所有记录。
最终记录总数:第一张表总记录数 × 第二张表总记录数
注意:两个表之间匹配次数越多,执行效率越低,应要尽量避免笛卡尔积现象。
2、内连接(等值连接:连接条件是一个等量关系)(inner可省略)
语法:select..字段..from....表A....(inner)join.....B表....on...连接条件....where....过滤条件
# 来自city表,加上(join)dept表,条件是city表的provinceid字段与dept表的manager字段相等的记录,
查询两个表所有的字段
select c.*,d.* from city c join dept d on c.provinceid = d.manager;
3、内连接(非等值连接:连接条件不是一个等量关系)
# 来自city表,(inner)join加入goods表,连接条件是city表的id字段大于goods表的id字段,查询所有字段
select c.*,g.* from city c inner join goods g on c.id > g.id;
4、内连接(自连接:自连接对应的是同一张表)
理解:自连接查询的是同一张表的数据,可理解成把一张表拆分成两张表,与多表查询一样
# 来自emp表,连接条件emp表的mgr字段与emp表的empno字段相等数据,查询字段ename
select a.ename as "员工",b.ename as "上级" from emp a join emp b on a.mgr = b.empno;
5、外连接(右外连接:右表为主表,左表为次表)
(主表查询所有结果,附带查询次表)(左外连接同理)
理解:右连接(right join),把右表的数据全部查询出来,附带查询满足b.mgr = a.empno条件数据,即有些上级无员工(右表的mgr字段数据未能找到左表empno相等的字段)。
# 此处是用同一张表,可拆分成两张表
select a.ename as "员工",b.ename as "上级" from emp a right join emp b on b.mgr = a.empno;
四、补充内容(待持续补充)
简明:该部分为MySQL学习总结的剩余知识点。
1、约束
简明:约束(constraint)对表中的字段加一些约束条件,以来保证表中数据的完整性、有效性,也就是对字段下的数据进行限定。
2、约束分类
非空约束:not null (所约束的字段下数据不能为空)
唯一性约束:unique (所约束的字段下数据不能重复)
主键约束:primary key (作为每一行记录的唯一标识,区分每一行记录)
3、事务(重点)(注解式开发,理解即可)
简明:一个事务就是一个完整的业务逻辑,是一个最小的工作单元,不可再分,要么成功,要么失败,只能有一个结果。(只有DML语句才有事务概念 增、删、改)
理解:一个事务实际上就是多条DML语句,同时成功/失败,否则就会导致数据出错,生成不完整,无法进行关联。
4、事务实现过程
InnoDB存储引擎:提供一组用来记录事务性活动的日志文件。
如:事务开始 ...... insert ----->insert -----> insert ----> delete ...... 事务结束
注意:MySQL默认事务行为是提交事务,执行一次语句提交一次,不符合实际开发,需关闭MySQL自动提交事务机制(命令:start transaction;)。
5、索引
简明:索引是在数据库表的字段上添加的,是提高查询效率的一种机制。
不考虑索引的问题:如果字段上没有添加索引,MySQL会对该表字段进行全扫描,效率较低,等同于一页一页查询字典;若添加索引,则可以直接定位到某字段,对该字段下的数据进行匹配。
MySQL查询方式:1、全表扫描 2、根据索引检索
注意:在任何数据库中,表的主键会自动加上索引;被unique约束的字段也会自动加上索引。
6、考虑添加索引的情况
情况1:处理数据量相对硬件处理能力而言,较庞大。
情况2:字段经常出现在where后面,以条件的形式存在,即经常被扫描。
注意:不随意添加索引,索引需要维护;建议通过主键查询、通过unique约束的字段查询。
7、总结表的设计思路
一对多:两张表,多的表加外键。(一个班级对应多个学生,学生表加外键)
多对多:三张表,关系表加2个外键。(一个教师教学多个班级,一个班级有多个教师,需建立第三张表管理两者的关系)
一对一:若遇到一张表中太多字段,可以进行拆分成2个表,在子表中另新建一个字段,设为
外键,同时用unique约束。
五、总结
本文详细记录个人学习MySQL数据库总结内容,个人认为较经常使用的知识、概念已写在文中,若有理解错误 / 编写瑕疵的地方,请指出/分享,共同学习!!!