一、DQL:查询语句
1.排序查询:根据给出的列名进行排序
- 语法:order by 子句
order by 排序列名1 排序方式1,排序列名2,排序方式2;
排序方式:ASC --升序
DESC --降序 - 注意:有多个排序条件时,当前面的条件值一样。则会判断第二条件
2.聚合函数:将一列数据作为一个整体进行纵向的计算
- count:计算个数,一般用于统计记录
select count(列名) from student;
一般选择非空的列,如主键
- max:计算最大值
select max(列名) from student;
- min:计算最小值
select min(列名) from student;
- sum:计算和
select sum(列名) from student;
- ave:计算平均值
select ave(列名) from student;
- 注意:聚合函数自动排除null值
- 解决方案:
- 选择不包含null的列进行计算
- ifnull(为null的列名,替换的值);
3.分组查询:根据给出的列名进行分组查询
- 语法:group by 分组列名;
根据性别查询男生,女生各有多少人
select sex,count(id) from student group by sex;
- 注意: 分组之后查询的字段最好是分组字段和聚合函数,不建议查询其他没有参与到分组的字段。
- where 和 having的区别
- where在分组之前进行限定,如果不满足条件则不参与分组;having在分组之后进行限定,如果不满足结果,则不会被查询出来。
- where后不可以跟聚合函数,having可以进行聚合函数的判断。
4.分页查询
- 语法:limit 开始的索引,每页查询的条数
每页显示3条学生数据
select * from student limit 0,3; -- 第一页
select * from student limit 3,3; -- 第二页
select * from student limit 6,3; -- 第三页
- 公式:开始的索引 = (当前的页码-1)* 每页显示的条数
- limit 是一个MySQL方言
二、约束
1.概念:
- 对表中的数据经行限定,保证数据的正确行、有效性和完整性。
2.分类:
- 主键约束:primary key
- 添加约束:
创建表前:在类型后添加primary key;
创建表后:alter table 表名 modify 列名 类型 primary key; - 删除约束:alter table 表名 drop primary key; -- 注意在删除约束前要先删除相同的列。
- 注意:
- 含义:非空且唯一
- 一张表只能有 一个字段为主键
- 是表中记录的唯一标识
- 自动增长
- 概念:如果某一列是数值类型的,使用 auto_increment 可以完成值的自动增长。
- 添加自增:
创建表前:在需要添加自动增长的列的类型后添加 auto_increment关键字;
创建表后:alter table 表名 modify 列名 类型 auto_increment; - 删除自增:alter table 表名 modify 列名 类型;
- 非空约束:not null --某一列的值不能为空
- 添加约束:
创建表前:在类型后添加not null
创建表后:alter table student modify 列名 类型 not null; - 删除约束:altet table 表名 modify 列名 类型;
- 唯一约束:unique --某一列的值不能重复
- 删除唯一约束:alter tabale studen drop index 被约束的列名;
- 添加约束:
创建表前:在类型后添加unique
创建表后:alter table 表名 modify 列名 类型 unique; - 注意在创建表之后添加唯一约束要先删除表中重复的列,否则不能添加成功。
- 外键约束:foreign key
- 含义:让表与表之间产生关系,从而保证数据的正确性。
- 添加约束:
创建表之前:
create table 表名(
.....
外键列名 类型,
[constraint 外键名称] foreign key (外键列名) references 主键表名(主键列名);
);
创建表后:alter table 表名 add constraint 外键名称 foreign key (外键列名) references 主键表名(主键列名);
- 删除约束
alter table 表名 drop foreign key 外键名称; - 注意:
- 创建外键表之前,先创建主键表。
- 如果主键中引用了外键列,那么在删除主键列时要先删除外键列。
- 级联操作
- 添加级联操作
alter table 表名 add constraint 外键名称 foreign key (外键列名) references 主键表名(主键列名) on update cascade;
- 分类:
- 级联更新:on update cascade --外键表中列的数据更新,主键表中引用的列数据也会更新
- 级联删除:on delete cascade --外键表中删除列的数据,主键表中引用列的所有数据都会被删除,谨慎使用、。
三、多表之间的关系
1.一对一(了解)
- 如:人和身份证
- 分析:一个人只能有一张身份证,一张身份证只能对应一个人。
2.一对多
- 如:教师和学生
- 一个老师可以教多个学生,多个学生可以上一个老师的课。
3.多对多
- 如:学生和课程
- 分析:一个学生可以选修多门课程,一门课程可以被多个学生选择。
4.实现关系
- 一对多:在多的一方建立外键,并指向一的一方的主键。
- 多对多:创建第三张表作为中间表,中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键。
- 一对一:在任意一方添加唯一约束的外键指向另一方的主键。
四、范式
1.概念:设计数据库时,需要遵循的一些规范;要遵循后面的范式要求,必须先遵循前面的所有范式要求。
2.分类
- 第一范式(1NF):每一列都是不可分割的原子数据项
- 第二范式(2NF):在第一范式的基础上,非码属性必须完全依赖于码(在1NF基础上消除主属性对码的部分函数依赖)。
- 第三范式(3NF):在2NF基础上,任何非属性不依赖与其他非主属性(在2NF基础上消除传递依赖)。
3.相关概念:
- 函数依赖:A-->B,如果通过A属性(属性组)的值,可以确定唯一B属性的值,则称B依赖于A。
如:学号--->学生姓名 (学号+ 课程名)--->分数 - 完全函数依赖:A--->B,如果A是一个属性组,则B属性值的确定需要依赖于A属性组中所有的属性值。
如:(学号+课程名)--->学生成绩 - 部分函数依赖:A--->B,如果A是一个属性组,则B属性值的确定只需要依赖于A属性组中某一些值即可。
如:(学号+课程名)---> 学生姓名 - 传递函数依赖:A---B,B--->C,如果通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值可以确定唯一C属性的值,则称C传递函数依赖与A。
如:学号---->系名,系名--->系主任 - 码:如果在一张表中,一个属性或属性组被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码
如:学生表中(学号) - 主属性:码属性组中的所有属性
- 非主属性:除码属性组的所有属性
五、数据库的备份与还原
1.命令行:
语法:备份:mysql -uroot -proot 数据库名 > 保存路径
还原:1.登录数据库
2.创建数据库(与还原的数据库名相同)
3.使用数据库
4.执行命令:source 文件路径;
bc4d9e36ce42 8 月前
641bed6f12f5 8 月前