要有态度! 不会爆炸!
数据库第二天
一、DQL:查询语句
1、排序查询
order by 子句
order by 排序 字段1,排序方式1; 排序字2 排序方式2..........
排序方式
ASC
升序默认的
DESC
降序
注意
如果有多个排序条件,则当前的条件值一样时,才会判断第二条件。
2、聚合函数
1、count :计算个数
1、一般选择非空的列:主键
count(*);
将一列数据作为一个整体,进行纵向的计算
2、max 计算最大值
3、min计算最小值
4、sum 计算和
5、avg 计算平均值
注意:聚合函数的计算,会排出null值
解决方案:
1、选择不包含非空的列进行计算
IFNULL函数
3、分组查询:
1、语法:
group by 分组字段
注意:
1、分组之后查询的字段:分组字段,聚合函数
****where 和 havaing 的区别
where在分组之前进行限定,如果不满足条件,则不参与分组。 having 在分组之后进行限定,如果不满足结果,则不会被查询出来。
where 后不可以跟聚合函数,having 可以进行聚合函数的判断。
4、分页查询
limit 开始的索引,每页查询的条数
开始的索引=(当前的页码-1)*每页显示的条数
公式:开始的索引=(当前的页码-1)*每页显示的条数
二、约束
概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性。
1、主键约束: primary key
1、注意事项
含义:非空且 唯一
一张表只能有一个字段为主键
主键就是表中记录的唯一标识
2、在创建表时候,添加主键约束
create table stu ( id int primary key, name varchar(20) ) ;
3、删除主键
alter table stu drop primary key;
4、创建完表 添加主键
alter table stu modify id int primary key;
5、自动增长:
1、概念 如果是某一列是数据类型的,使用 autp_increment 可以来完成值的自动增长
2、 创建表时,添加主键约束,并且完成主键自动增长
create table stu ( id int primary key auto_increment, --给id添加主键约束 name varchar(20) );
3、删除自动增长
alter table stu modify id int;
4、添加自动增长
alter table stu modify id int auto_increment;
2、非空约束:not null
1、 创建表时添加约束
name varchar(20),not null -- name为非空
2、创建表完后,添加非空约束
alter table stu modify name varchar(20) not null;
3、删除name的非空约束
alter table stu modify name varchar(20);
3、唯一约束:unique
某一列的值不能重复
注意
1、 唯一约束可以有nul 值,但是只能有一条记录为null
2、创建表的时候,条件唯一约束
create table stu( id int, phone_number varchar(20) unique ---手机号 )
3、删除唯一约束
alter table stu drop index phone_number;
4、外键约束foreign key
外键约束: foreign key, 让表与表产生关系 从而保证数据的正确性
1、在创建表时,可以添加外键
create table 表名 ( .... 外键列 constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名名称) );
2、删除外键,
alter table 表名 drop foreing key 外键名称
3、创建表后 添加外键
alter table 表名 add constraint 外键名称 foreing key(外键字段名称)references 主表名称(主表列名称);
4、级联操作
添加级联操作
语法: alter table 表名 add constraint 外键名称 foreing key(外键字段名称)references 主表名称(主表列名称)on update cascade on delete cascade;
分类
1、级联更新: on update cascade
2、级联删除: on delete cascade
三、多表之间的关系
1、多表之间的关系
1、一对一(了解):
如:人和身份证 分析:一个人只有一个身份证,一个身份证只能对应一个人
2、一对多(多对一):
如:部门和员工 分析:一个部门有多个员工,一个员工只能对应一个部门
3、多对多
如 学生和课程 分析 一个学生 可以循很多门课程,一个课程 也可以被很多学生选择
2、实现关系
1、一对多(多对一)
如 部门和员工 实现方式:再多的一方建立外键,指向一的一方的主键
2、多对多:
如 学生和课程 实现方式 多对多关系实现需要借助第三张表中间表
3、一对一(关系)
一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键
四、数据库设计范式
概念:设计数据库时,需要遵循的一些规范,要遵循后边的范式要求,必须先遵循前边的所有范式要求
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据冗余度越小
目前关系数据库有六种范式,第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(bcnf)第四范式(4nf)、第五范式(5nf)完美范式
1、第一范式(1nf):每一列都是不可分割的原子数据项
2、第二范式(2nf):在1nf的基础上,非码属性必须完全依赖于候选码(在1nf基础上消除非主属性对主码的部分函数依赖)
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属性的值,在通过B属性(属性组)的值可以确定唯一C的值,则称C传递函数依赖A
5、码:如果在一张表中,一个属性或属性组,被其他所有属性锁完全依赖,则称这个属性(属性组)为 该表的码
主属性: 码属性组中的所有属性
非主属性:除过码属性组的属性
3、第三范式(3nf):在2nf基础上,任何非主属性不依赖于其他非主属性(在2NF基础上消除传递依赖)
五、数据库的还原和备份
命令行: 语法
*备份 : mysqldump -u用户名 -p密码 >保存的路径
还原
1、登录数据库
2、创建数据库
3、使用数据库
4、执行文件。sourse文件路径
主键 很重要