MySQL约束
1.排序查询:根据给出的列名进行排序
-
语法:order by 子句
order by 排序列名1 排序方式1,排序列名2,排序方式2;
排序方式:ASC --升序
DESC --降序
-
注意:有多个排序条件时,当前面的条件值一样。则会判断第二条件
2.聚合函数:将一列数据作为一个整体进行纵向的计算
-
count:计算个数,一般用于统计记录
select count(列名) from student;
一般选择非空的列,如主键
-
max:计算最大值
-
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.使用数据库

浙公网安备 33010602011771号