一、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值
  • 解决方案:
  1. 选择不包含null的列进行计算
  2. ifnull(为null的列名,替换的值);
3.分组查询:根据给出的列名进行分组查询
  • 语法:group by 分组列名;

根据性别查询男生,女生各有多少人

select sex,count(id) from student group by sex;


  • 注意: 分组之后查询的字段最好是分组字段聚合函数,不建议查询其他没有参与到分组的字段。
  • where 和 having的区别
  1. where在分组之前进行限定,如果不满足条件则不参与分组;having在分组之后进行限定,如果不满足结果,则不会被查询出来。
  2. 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; -- 注意在删除约束前要先删除相同的列。
  • 注意:
  1. 含义:非空且唯一
  2. 一张表只能有 一个字段为主键
  3. 是表中记录的唯一标识
  • 自动增长
  1. 概念:如果某一列是数值类型的,使用 auto_increment 可以完成值的自动增长。
  2. 添加自增:
    创建表前:在需要添加自动增长的列的类型后添加 auto_increment关键字;
    创建表后:alter table 表名 modify 列名 类型 auto_increment;
  3. 删除自增: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 外键名称;
  • 注意:
  1. 创建外键表之前,先创建主键表。
  2. 如果主键中引用了外键列,那么在删除主键列时要先删除外键列。
  • 级联操作
  1. 添加级联操作

alter table 表名 add constraint 外键名称 foreign key (外键列名) references 主键表名(主键列名) on update cascade;


  1. 分类:
  • 级联更新: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 文件路径;