<>MySQL约束

今日学习内容
1.DQL:查询语句 1.排序查询 2.聚合函数 3.分组查询 4.分页查询 2.约束 3.多表关系 4.范式 5.数据库备份和还原
<>DQL查询语句

<>排序

通过ORDER BY子句,可以将查询出的结果进行排序
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC]; ASC:升序,默认值 DESC:降序
单列排序:只按某一个字段进行排序,单列排序
-- 查询学生表中所有数据,使用年龄进行降序排序 select * from Student order by age desc
组合排序:同时对多个字段进行排序,如果第一个字段相等,则按第二个字段排序,往后推
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC]; --
查询学生表所有数据,在年龄上进行降序基础上,年龄相同则以分数升序排序 select * from student order by age desc,score
asc;
<>聚合函数

聚合函数是纵向查询,是对一列的值进行计算,然后返回结果。

聚合函数会忽略空值NULL,解决:我们可以选择不包含非空的列计算,或者使用IFNULL函数
IFNULL(列名,默认值) 如果列名不为空,返回这列的值。如果为 NULL,则返回默认值。 -- 查询id字段,如果为null,则使用0代替 select
ifnull(id,0) from student;
聚合函数

SQL中聚合函数作用
max求这一列的最大值
min求这一列的最小值
avg求这一列的平均值
count统计这一列有多少条记录
sum对这一列求总和 -- 查询年龄大于18的总数 select count(*) from student where age>18; --
查询英语成绩总分 select sum(english) 总分 from student; -- 查询英语成绩最低分 select min(english)
最低分from student; -- 查询英语成绩最高分 select max(english) 最高分 from student; -- 查询英语成绩平均分
select avg(english) 平均分 from student;
<>分组

对查询信息进行分组,相同数据作为一组
SELECT 字段 1,字段 2... FROM 表名 GROUP BY 分组字段 [HAVING 条件];
where和having的区别

1.where在分组之前进行限定,如果条件不满足,则不参与分组

having在分组之后进行限定,如果不满足结果,则不会被查询

2.where后不可跟聚合函数,having可以进行聚合函数的判断
-- 按照性别分组。分别查询男、女同学的平均分 select sex ,avg(english) from student group by sex; --
按照性别分组。分别查询男、女同学的平均分,人数 select sex ,avg(english), count(id) from student group
by sex; -- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于60分的人,不参与分组 select sex,avg(score),
count(id) from student where score >=60 group by sex;A --
按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于60分的人,不参与分组,分组之后。人数要大于3个人 select sex,avg(score),
count(id) from student where score>=60 group by sex having count(id)>3;
limit语句

LIMIT 的作用就是限制查询记录的条数。
SELECT *|字段列表 [as 别名] FROM 表名 [WHERE 子句] [GROUP BY 子句][HAVING 子句][ORDER BY 子句][
LIMIT 子句];
格式
LIMIT offset,length; -- offset:起始行数,从0开始,默认为0 -- length:返回的行数 --
查询学生表信息,从第3行开始显示,显示5条 select * from student limit 2,5;
分页查询
limit 开始的索引,每页查询的条数; 开始的索引 = (当前的页码 - 1) * 每页显示的条数 -- 每页显示4条 SELECT * FROM
studentLIMIT 0,4; -- 第1页 SELECT * FROM student LIMIT 4,3; -- 第2页 SELECT * FROM
studentLIMIT 7,3; -- 第3页
<>约束

为什么要进行约束?
对表中的数据进行限制,保证了数据的正确性,有效性和完整性,添加了约束,错误的数据是无法被添加到表中的
<>约束分类

约束名约束关键字
主键约束primary key
唯一约束uniqe
非空约束not null
外键约束foreign key
检查约束check 备注:mysql不支持
<>主键约束

*
主键的作用:用来唯一标识数据库的每一条记录

*
通常不用业务字段作为主键,一般每张表会单独设计一个id字段,把id作为主键。主键是给数据库和程序服务的,不是给客户使用的

*
主键的特点:非空(not null) 、唯一(不重复)

*
主键自增:数据库自动生成主键字段的值,AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)

创建主键
1.创建表时添加主键 字段名 字段类型 primary key 2.在已有表中添加主键 alter table 表名 add primary key(字段名)
; -- 创建学生表stu,包含字段(id,name,age)id作为主键 create table stu( id int primary key,
--id为主键 name varchar(20), age int ) desc stu; --删除主键 alter table stu drop
primary key; -- 添加主键 alter table stu add primary key(id);
修改自增长的默认起始值

默认自增长开始值是1,但是可以进行修改

创建表的起始值
create table 表名( 列名 int primary key auto_increment, )auto_increment=起始值; --
指定起始值为100 create table stu1 ( id int primary key auto_increment, name varchar(20
) ) auto_increment = 100; insert into stu1 values (null, '轩月'); select * from
stu1; 结果: id name 100 轩月 -- 删除自动增长 alter table stu1 modify id int; -- 添加自动增长
alter table stu1 modify id int auto_increment;
<>唯一约束

unique,表中某一列不能出现重复值
字段名 字段类型 uniqe
创建学生表stu2,包含字段(id,name)name列设置唯一约束,即不能出现同名的学生
-- 创建表时,添加唯一约束 create table stu2 ( id int, name varchar(20) unique ); -- null
没有数据,不存在重复的问题 ,列值可以有多个null -- 删除唯一约束 alter table stu2 drop index name;
--创建表后,添加唯一约束 alter table stu2 modify name varchar(20) unique;
<>非空约束

某一列中不能为null
字段名 字段类型 not null
创建学生表stu3,包含字段(id,name,age)name不能为空null
-- 创建表时添加非空约束 create table stu3 ( id int, name varchar(20) not null, age int );
-- 创建表后,添加非空约束 alter table stu3 modify name varchar(20) not null;
<>外键约束

foreign key,让表与从表产生关系
-- 创建表时,添加外键 create table 表名( ... 外键列 constraint 外键名称 foreign key (外键列名称)
references 主表名称(猪表列名称) ); -- 删除外键 alter table 表名 drop foreign key 外键名称; --
创建表后,添加外键 alter table 表名 add constraint 外键名称 foreign key(外键字段名称) references 主表名称
(主表列名称);
级联操作:在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作

级联操作语法描述
on update cascade级联更新,只能是创建表的时候创建级联关系。更新主表中的主键,从表中的外键 列也自动同步更新
on delete cascade级联删除 -- 添加级联操作 alter table 表名 add constraint 外键名称 foreign key(
外键字段名称) references 主表名称(主表列名称) on update cascade on delete cascade ;
<>数据库设计

<>表与表间的关系

表与表间的三种关系
一对一(1:1) :员工表 简历表 等使用较少
一对多(1:n):员工和部门 最常用
多对多(m:n):学生选课表和学生表 ,一门课程多个学生选择,一个学生选择多门课程
<>数据规范化

什么是范式:设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

一般用前三种范式

范式特点
1NF原子性:表中每列不可拆分
2NF不产生局部依赖,一张表只描述一件事情,表中每一列都完全依赖于主键
3NF不产生传递依赖,表中每一列都直接依赖于主键,而不是通过其他列间接依赖于主键
几个依赖的概念
1.函数依赖:A--->B 通过A属性(属性组)的值,可以确定唯一B属性值,称为B依赖于A // 学号-->姓名 (学号,课程名称-->分数) 2.
部分函数依赖:A-->B,如果A是一个属性组,则B属性值确实只需要依赖A属性组某些值就可 //(学号,课程名称) -- > 姓名 3.完全函数依赖 :A-->
B,如果A是一个属性组,则B属性值需要依赖A属性组所有的属性值//(学号,课程名称) --> 分数 4. 传递函数依赖:A-->B, B-->C ,是如果存在
"A → B → C"的决定关系,则 C 传递依赖于 A //学号-->系名,系名-->系主任 5.
码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码 主属性:码属性组中的所有属性 非主属性:除过码属性组的属性
//例如表中码为:(学号,课程名称)
<>数据库的备份和还原
-- 备份 mysqldump -u用户名 -p密码 数据库名称 > 保存的路径 -- 还原 1.登录数据库 2.创建数据库 3.使用数据库 4.执行文件
source 文件路径-- 还原格式 use 数据库; source 导入文件的路径;

技术
©2019-2020 Toolsou All rights reserved,
css中上下左右居中的几种实现方法[CISCN 2019 初赛]Love Mathc/c++语言实现登陆界面Unity3D 人称设置(第一人称视角、第三人称视角)Fastadmin框架自定义搜索操作流程2021最新Python自动化软件测试笔试题(含答案)黑客帝国装逼的代码雨mysql数据库设置字符集配置修改my.ini文件(windows)python之panda模块1Python学习笔记:基础+进阶10道练习题