查询语句
排序查询
语法:
select * from 表 order by 排序字段1 排序方式1,排序字段n 排序方式n;
排序方式
asc:升序,默认
desc:降序
注意
如果有多个排序条件,当前边条件值一样时才会用后面的排序方式
聚合函数
将一列数据作为一个整体,进行纵向计算(eg:算一列数据平均值)
类型
1.count:计算个数
2.max:计算最大值
3.min:计算最小值
4.sum:计算和
5.avg:计算平均值
语法
select 类型(列名) from 表;
注意
会排除null值
解决方案
1.选择不包含null的列
2.ifnull(列名,替换的值)
分组查询
语法
select ? from 表 group by 列名;
注意
1.分组之后查询的字段:分组字段,聚合函数
2.where和having
1.where在分组之前限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足条件,则不会被查询出来
2.where后不可以跟聚合函数,having可以
分页查询
语法
select * from 表 limit 开始行数,开始行数后几行;
eg
select * from 表 limit 0,3; -- 第一页,三行数据
select * from 表 limit 3,3; -- 第二页,三行数据
select * from 表 limit 6,3; -- 第三页,三行数据
公式
开始的索引 = (当前页码-1) * 每页显示的行数
注意
limit是mysql方言
约束
概念:对表中的数据进行限定,从而保证数据的正确性,有效性,完整性。
分类
1.主键约束:primary key
2.非空约束:not null
3.唯一约束:unique
4.外键约束:foreign key
主键约束
1.注意
1.含义:非空且唯一
2.一张表只能由一个字段为主键
3.主键就是一张表中记录的唯一标识
2.在创建表的时候添加主键约束
create table stu{
id int primary key ,
name varchar(20)
};
3.删除主键
alter table 表名 drop peimary key;
4.创建完表后,添加主键
alter table 表名 modify 列名 列数据类型 primary key;
5.自动增长
1.如果某一列是数值类型的,使用 auto_increment 可以来完成值的自动增长
2.创建表时,添加主键约束并设置自动增长
在主键最后加 auto_increment
3.删除自动增长
alter table 表 modify 列 列类型;
4.新建表后添加自动增长
alter table 表名 modify 列名 列数据类型 auto_increment ;
非空约束
某一列的值不能为null
1.创建表时添加约束:在创建语句后面添加 not null;
eg:id int not null;
2.创建表后添加:
alter table 表名 modify 列名 类型 not null;
3.删除非空约束
alter table 表名 modify 列名 类型 ;
唯一约束
某一列的值不能重复,ps:null也作为一个值
1.创建表时添加约束:在创建语句后面添加 unique;
eg:id int unique;
2.创建表后添加:
alter table 表名 modify 列名 类型 unique;
3.删除非空约束
alter table 表名 drop index 列名;
外键约束
1.在创建表时,可以添加外键
语法:
create table 表名{
***
外键列
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
};
2.删除外键
语法:alter table 表 drop foreign key 外键名;
3.添加外键
语法:alter table 表 constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
4.级联操作
添加在外键语句的最后
1.级联更新 on update cascade
2.级联删除on delete cascade
数据库设计
多表之间的关系
1.分类
1.一对一:
如:人和身份证
分析:一个人只有一个身份证,一个身份证只能对应一个人
2.一对多(多对一)
如:部门和员工
分析,一个部门有多个员工,一个员工只能对应一个部门
3.多对多
如:学生和课程
分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择
2.实现关系
1.一对多(多对一):
如:部门和员工
2.多对多:
如:学生和课表
3.一对一:
如:学生和身份证号
数据库设计的范式
概念
设计数据库时,需要遵循的一些规范。
要遵循后边的范式要求,必须先遵循前边的所有范式要求
分类
1.第一范式(1NF)
数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组
2.第二范式(2NF)
在第一范式的基础上,要求数据库表中的每个实例或记录必须可以被唯一地区分
3.第三范式(3NF)
在第二范式的基础上,一个关系中不包含已在其它关系已包含的非主关键字信息
几个概念
1.函数依赖:A-->b,如果通过A属性(属性组)的值可以确定唯一的b属性的值,则b依赖于a
eg:学号->姓名 (学号,课程名称)-->分数
2.完全函数依赖:a-->b,如果a是一个属性组,则b属性值得确定需要依赖于a属性组中所有的属性值
eg: (学号,课程名称)-->分数
3.部分函数依赖:a-->b,如果a是一个属性组,则b的属性值得确定只需要依赖于a属性组中某一些值即可
eg: (学号,课程名称)-->姓名
4.传递函数依赖 a-->,b-->c,如果通过a属性(属性组)的值,可以确定唯一b属性的值,在通过b属性(属性组)的值可以确定唯一c属性的值,则称c传递函数依赖于a
eg:学号-->系名,系名-->主任
5.码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码
eg:课表中码为(学号,课程名称)
*主属性:码属性组中的所有属性
*非主属性:除过码属性组的属性
数据库的备份和还原
1.命令行:
备份:
mysqldump -u用户名 -p密码 数据库名 > 保存的路径
还原:
1.登录数据库
2.创建数据库
3.使用数据库
4.执行文件。source文件路径
2.图形化工具:
备份
傻瓜式操作,右键备份
还原
执行sql文件