发布时间:2023-08-01 15:00
这是阿锃总结的第三节黑马程序员JAVA WEB视频的MYSQL约束部分的笔记。希望可以帮助跟我一样正在学习Java web的同学们。我们一起进步。 b_d
若果有同学也想学习黑马程序员Java web的视频,可以在我的主页找我第一次发布的文章,里面有链接,并且若是有同学想要MYSQL、SQLYOG.......相关的软件可以评论区留言,我会及时回复大家! b_d
MYSQL第三节笔记:
# 今日内容 1. DQL:查询语句的使用 1. 排序查询 2. 聚合函数 3. 分组查询 4. 分页查询 2. 约束 3. 多表之间的关系 4. 范式 5. 数据库的备份和还原 ## DQL:查询语句的使用 1. 排序查询 * 语法: order by 排序字段 排序方式,....; * 排序方式: 1. 升序:asc(默认) 2. 降序:desc * 注意: 如果有多个排序时,则当前面的条件值一样时,才会判断第二条件。 2. 聚合函数:将一列数据作为一个整体,进行纵向的计算。 1. count:计算个数 select count(ifnull(字段名称,0)) from 表名 ......; 2. max:计算最大值 select max(字段) from 表名; 3. min:计算最小值 select min(字段) from 表名; 4. sum:计算和 select sum(字段) from 表名; 5. avg:计算平均值 select avg(字段) from 表名; * 聚合函数的计算,排除null。 解决方案: 1. 选择不包含非空的列 2. ifnull(字段,0) 3. 分组查询 * 语法: group by 分组依据的字段 * 注意: 1. 分组之后查询的字段:分组依据的字段、聚合函数 2. where 和 having 的区别 where : 1. 在分组之前进行限定,如果不满足条件,则不参与分组。 2. 后面不可以加聚合函数。 having : 1. 在分组之后进行限定,如果不满足条件,则不会被查询出来。 2. 后面可以加聚合函数。 * 例如:依据性别分组,分别查询男生、女生的平均分 select sex,avg(math) from student group by sex; * 例如:依据性别分组,分别查询男生、女生的平均分,分数低于70分的人不参与分组 select sex,avg(math) from student where math>70 group by sex; * 例如:依据性别分组,分别查询男生、女生的平均分,分数低于70分的人不参与分组,分组之后人数大于2个人 select sex,avg(math) from student where math>70 group by sex; having count(id)>2 4. 分页查询 * 语法: limit 开始的索引,每页查询的条数。 * 公式: 开始的索引 = (当前页码 - 1) * 每页显示的条数 * 例如:每页显示3条记录 第一页: select * from student limit 0,3; 第二页:select * from student limit 3,3; * 分页查询是一个MYSQL“方言” ## 约束 * 概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性。 * 分类: 1. 主键约束:primary key 2. 非空约束:not null 3. 唯一约束:unique 4. 外键约束:foreign key * 非空约束:not null 某一列的值不能为null 1. 在创建表时添加约束 ... name varchar(20) not null ... 2. 在创建表之后,添加非空约束 alter table 表名 modify 字段名称 数据类型 not null; * 唯一约束:unique 某一列的值不能重复 1. 在创建表时添加约束 ... id varchar(20) unique ... 2. 在创建表之后,添加非空约束 alter table 表名 modify 字段名称 数据类型 unique; * 注意: 1. 唯一约束有null值,但是只能有一个null。 2. 删除唯一约束:alter table 表名 drop index 字段名称; * 主键约束:primary key 只有一个!!! 1 . 注意: 1. 含义:非空且唯一 2. 一张表只能有一个字段为主键 3. 主键就是表中记录的唯一标识 4. 删除主键约束:alter table 表名 drop primary key; 5. 联合主键多对多表产生的先建表: primary key(第一张表的主键,第二张表的主键) 2. 在创建表时添加主键约束 ... id int primary key, ... 3. 在创建表之后,添加主键约束 alter table 表名 modify 字段名称 数据类型 primary key; 4. 自动增长(主要是配合 int 类型的主键) 1. 概念:某一列是数值类型的,使用 auto_increment 可以来完成值的自动增长。 2. 在创建表时田间主键约束 ,并且自动增长 ... id int primary key auto_increment, ... * 插入时: insert into 表名 values(null,???)来实现id的自动增长 3. 删除自动增长 alter table 表名 modify id int; 4. 在创建表之后,添加主键约束,并且自动增长 alter table 表名 modify 字段名称 数据类型 primary key auto_increment; * 外键约束:foreign key 1. 在创建表时添加外键约束 ... 外键列名称 数据类型 , constraint 外键名称(自定义的名称) foreign key (外键列名称) references 主表名称(主表列名称); ... 2. 删除外键 alter table 表名 drop foreign key 外键名称; 3. 在创建表之后,添加外键约束 alter table 表名 add constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称); 4. 级联操作 * 级联更新: alter table 表名 add constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) on update cascade; * 级联删除: alter table 表名 add constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) on delete cascade; ## 数据库的设计 1. 多表之间的关系 1. 分类: 1. 一对一 2. 一对多(多对一) 3. 多对多 2. 实现关系: 1. 一对多(多对一): * 再多的一方建立外键,指向一的一方的主键。 2. 多对多 * 新建第三张中间表,中间表至少需要两个字段,这两个字段作为第三张表的外键,分别指向前两张表的主键。 3. 一对一 * 可以在任意一方添加唯一外键指向另一方的主键。 2. 数据库设计的范式 * 概念:设计数据库时,需要遵循的一些规范。 * 分类: 1. 第一范式(1NF): * 存在问题: 1. 存在非常严重的数据冗余(重复)。 2. 数据添加存在问题。 3. 数据删除存在问题。 2. 第二范式(2NF): * 几个概念: 1. 函数依赖:如果通过A属性(属性组)的值,可以确定唯一B属性的值,则称B依赖于A。 2. 完全函数依赖:如果A是一个属性组,则B属性值得确定需要依赖于A属性组中所有的属性组。 3. 部分函数依赖:如果A是一个属性组,则B属性值的去确定需要依赖于A属性组中某一些值。 4. 传递函数依赖:A-->B,B-->C(唯一) 5. 码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性或属性组为该表的码 * 主属性:码属性组中所有属性 * 非主属性:除主属性 3. 第三范式(3NF): ## 数据库的备份和还原 1. 命令行: 备份语法:mysqldump -u用户名 -p密码 指定数据库的名称 > 保存的路径 mysqldump -uroot -proot db1 > D://a.sql 还原语法: 1. 登录数据库 2. 创建数据库 3. 使用数据库 4. 执行文件 (source 保存文件的路径) 2. 图形化工具
希望学习前端的小伙伴们,可以拿去学习!我们一同进步!