黑马程序员 JAVA WEB 第三节 MYSQL 约束

这是阿锃总结的第三节黑马程序员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. 图形化工具

 希望学习前端的小伙伴们,可以拿去学习!我们一同进步!

你可能感兴趣的:(mysql,java,前端)