一、什么是MySQL?
-
MySQL属于数据库的一种,他被称为关系型数据库, 例如:微软的SQL Server
-
MySQL数据是一种C/S模型,即客户端和服务端模型。客户端通过账号,密码连接服务器,连接成功后才可以进行数据操作(增删改查CRUD)
-
MYSQL的服务端采用的是 IO复用+可伸缩的线程池,实现了网络高并发的经典模型
二、MYSQL的SQL语句类别划分
-
DDL(Data Definition Language):数据库定义语言
定义了不同数据库,数据库表,列,索引等数据库对象的定义
常用的SQL:
create(创建)、drop(删除)、alter(更新) -
DML(Data Manipulation language):数据操控语言
用于增删改查数据库中的记录
常用的SQL:
insert(添加)、delete(删除)、update(更新)、select(查询) -
DCL(Data Control language):数据控制语言
控制不同数据库段直接访问和访问级别的语句
常用SQL: grant(给用户增加权限)、revoke(收回用户的权限)
三、数据库常用的名词
-
实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等。这里所说的“事物”不仅仅是看得见摸得着的“东西”,它也可以是虚拟的,例如“老师与学校的关系”。
-
属性:“实体所具有的某一特性”,属性一开始是个逻辑概念,比如说,“性别”是“人”的一个属性。在关系数据库中,属性又是个物理概念,属性可以看作是“表的一列”。
-
元组:表中的一行就是一个元组。
-
分量:元组的某个属性值。在一个关系数据库中,它是一个操作原子,即关系数据库在做任何操作的时候,属性是“不可分的”。否则就不是关系数据库
-
码(键):表中可以唯一确定一个元组的某个属性(或者属性组),
-
候选码(候选键): 能唯一标识关系中元组的一个属性或者属性集,称为候选码(候选键)。例如学生关系中的学号可以唯一标识一个学生,那么学号就是学生关系的候选键; 在选课关系中,只有学号和课程号才能唯一区分每一条选课记录,那么学号+课程号是选课关系的候选键。
-
主码(主键):若一个关系中有多个候选码,从候选码中选择一个作为CRUD元组的操作变量,这个候选码称为主码(主键)。
每个关系中必须选择一个主码,选定以后不能随意改变。 -
全码:如果一个码包含了所有的属性,这个码就是全码。
-
主属性:包含在主码中的各个属性就是主属性。
-
非主属性:没有在任何候选码中出现过,这个属性就是非主属性。
-
外码(外部关系键):一个属性(或属性组),它不是当前表的主码,是另一个表的码,对当前表来说就是外码。
四、数据库范式
-
什么是范式?
在关系模式的分解中,函数依赖有很重要的作用,分解这些依赖后,衡量的标准就是范式(Normal Forms,NF)。
范式 是在关系模式的规范化过程中要求设立的不同标准。 -
应用数据库范式的好处是什么?
1)减少数据冗余(最主要的好处、其他好处因此而附带)
2)消除异常(插入异常、更新异常、删除异常)
3)让数据组织的更加和谐。 -
范式的分类
1)第一范式1NF(First Normal Form)
2)第二范式2NF(Second Normal Form)
3)第三范式3NF(Third Normal Form)
4)BC范式(Boyce-Codd Normal Form)
5)第四范式、第五范式等等 -
范式的作用
进行数据库设计时字段、库表划分的依据 -
第一范式 1NF
每一列保持原子特征,列是基本数据项,不能再进行拆分,否则会设计成一对多的关系
不满足第一范式不能称之为关系型数据库
举例:
学生表(学号、用户名、性别、年龄、地址)
例:XX省XX市XX大学
例:XX省XX市XX区XX路XX大学当前例子中的地址信息还包含省市区可以拆分
拆分改造后:
学生表:(学号、用户名、性别、年龄、地址ID)
地址表:(地址ID、省、市、区)
此时满足第一范式 -
第二范式 2NF
属性完全依赖于主键(针对联合主键 →为了 消除部分依赖)
非主属性完全依赖于主键,如果不是依赖于主键,应该拆分成新的主体,拆分成一对多的关系
举例:
学生选课表(学生ID、学生姓名、性别、课程名、成绩)
主键:学生ID、课程名学生姓名 → 学生ID → 部分依赖主键
学生性别 → 学生ID → 部分依赖主键课程成绩 → 学生ID+课程名 → 完全依赖
通过拆分改造(消除部分依赖):
学生表(学生ID、学生姓名、性别) 主键:学生ID
课程成绩表(课程ID、课程名、学生ID、成绩) 主键:课程ID
键(课程ID、学生ID) -
第三范式 3NF
在2NF的基础上、属性不依赖于其他非主属性(为了消除依赖传递)
举例:
学生表(学生ID、学生姓名、性别、学院名、学院电话)
主键:学生ID学生姓名可以通过ID查到
学生性别可以通过ID查到
学院名也可以通过ID查到学院电话 → 学生ID → 查询学院 → 查询学院电话
(学院电话不能直接通过学生ID查出来(属性不依赖于其他非主属性))拆分改造(消除依赖传递):
学生表(学生ID、学生姓名、性别、学院ID) 主键:学生ID
学院表(学院ID、学院名、学院电话) 主键:学院ID -
BC范式
BC范式是在第三范式的基础上的一种特殊情况,既每个表里只有一个候选键。 -
应用范式需注意
1) 应用范式越高,表越多,带来的问题:
①查询时需要连接多个表,增加了查询的复杂性
②查询时需要连接多个表,降低数据库查询的性能
2)范式不是越高越好,一般满足三个范式就够了