学习目标:
- 熟练掌握查询语句的使用
- 理解并使用各种约束条件对列进行约束
- 学会数据库的设计思路
- 了解数据库的备份与还原
学习内容:
一、DQL:查询语句
1、排序查询
- 语法:
- order by 排序字段1 排序方式1, 排序字段2 排序方式2;
- 排序方式
- ASC:升序,默认的
- DESC:降序
- 注意
- 如果有多个排序条件,则当前面的条件值一样时,才会判断第二条件
2、聚合函数:将一列数据作为整体,进行纵向的计算,会排除null值进行计算
- count:计算个数
- 一般选择非空的列:主键列
- count(*)
- ifnull(列名,0)
- max:计算最大值
- min:计算最小值
- sum:计算和
- avg:计算平均值
3、分组查询
- 语法:group by 分组字段
- 注意
- 分组之后查询的字段:分组字段或聚合函数
- where与having的区别
- where在分组之前进行限定,不满足条件不参与分组;having在分组之后进行限定,不满足结果不被查询
- where后面不可以跟聚合函数,而having可以
4、分页查询
- 语法:limit 开始的索引,每页查询的条数
- 公式:开始的索引=(当前页码-1)*每页显示的条数
- 注意:limit是MySQL的一个方言
二、约束
1、概念
- 对表中数据进行限定,保证数据的正确性、有效性、完整性
2、分类
- 主键约束:primary key
- 非空约束:not null
- 唯一约束:unique
- 外键约束:foreign key
3、非空约束:某一列的值不能为空
- 创建表时添加约束
create table stu(
id int,
name varchar(32) not null
); - 创建表后添加约束
alter table stu modify name varchar(32) not null; - 删除非空约束
alter table stu modify name varchar(32);
4、唯一约束:某一列的值唯一
- 注意:唯一约束可以有null值,但是只能有一条记录为null
- 在创建表时,添加约束
create table stu(
id int,
phone_number varchar(32) unique
); - 创建表后添加约束
alter table stu modify name varchar(32) unique; - 删除唯一约束
alter table stu drop index phone_number;
5、主键约束:表示非空且唯一
- 注意
- 一张表中只能有一个字段为主键
- 主键就是表中记录的唯一标识
- 在创建表时,添加约束
create table stu(
id int primary key,
name varchar(20)
); - 在创建表后,添加约束
alter table stu modify id int primary key; - 删除主键约束
alter table stu drop primary key; - 自动增长
- 概念:如果某一列是数值类型,使用auto_increment 可以来完成自动增长
- 在创建表时,添加自动增长
create table stu(
id int primary key auto_increment,
name varchar(20)
); - 删除自动增长
alter table stu modify id int; - 创建表后添加自动增长
alter table stu modify id int auto_increment;
6、外键约束:foreign key,让表与表产生关系,保证正确性
- 在创建表时添加外键
create table emp(
id int,
…,
constraint 外键名称 foreign key (外键列名称) references 主表名称 (主表列名称);
); - 删除外键
alter table emp drop foreign key 外键名称; - 创建表后添加外键
alter table emp add constraint 外键名 foreign key (外键列名称) references 主表名称(主表列名称); - 级联操作
- 创建表后添加级联操作(更新、删除)
alter table 表名 constraint 外键名 foreign key (外键列名)
references 主表名称(主表列名称) on update cascade on delete cascade; - 分类
- 级联更新:on update cascade
- 级联删除:on delete cascade
- 创建表后添加级联操作(更新、删除)
三、数据库的设计
1、多表之间的关系
- 一对一(了解)
- 人与身份证
- 实现:任意一方添加唯一外键,指向另一方的主键
- 一对多(多对一)
- 员工和部门
- 实现:在多的一方建立外键,指向一的一方的主键
- 多对多
- 学生与课程
- 实现:需要借助第三张中间表,中间表至少包含两个字段,这两个字段作为第三张
表的外键,分别指向两张表的主键
2、范式
- 概念
设计数据库时,需要遵循的一些规范。要遵循后面的范式要求,必须先遵循前面的所有范式要求 - 分类
- 第一范式(1NF):每一列都是不可分割的原子数据项
- 第二范式(2NF):在1NF基础上,非码属性必须完全依赖于候选码(在1NF基础上消除
非主属性对主码的部分函数的依赖)- 函数依赖:A–>B,如果通过A属性(属性组)的值,可以确定唯一B属性的值,则称B
依赖于A; - 完全函数依赖:A–>B,如果A是一个属性组,则B属性的值的确定依赖A中所有
属性值; - 部分函数依赖:A–>B,如果A是一个属性组,则B属性值的确定只依赖A属性组
中某些值; - 传递函数依赖:A–>B–>C,如果通过A属性(属性组)可以确定唯一B属性的值,
再通过B属性(属性组)确定唯一C属性的值,则称C传递依赖于A; - 码:如果一张表中,一个属性或属性组,被其他属性完全依赖,则称为该表的码。
- 主属性、非主属性:码中的属性称为主属性,非码中的属性称为非主属性。
- 函数依赖:A–>B,如果通过A属性(属性组)的值,可以确定唯一B属性的值,则称B
- 第三范式(3NF):在2NF的基础上,任何非主属性不依赖于其他非主属性(在2NF基础上
消除传递依赖)
四、数据库的备份与还原
1、命令行
- 语法:
- 备份
mysqldump -u用户名 -p密码 数据库名称 > 保存的路径(路径:文件名.sql) - 还原(进入MySQL)
source 备份文件;
- 备份