MySQL(三)
约束
Not null : 表示数值不能为空;
unique :唯一值,不能插入相同的数据;
default :规定没有给列赋值时的默认值;
primary key :主键,一张表只能有一个主键;
foreign key :外键,一张表可以有多个外键;
check :保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略
CHECK子句;
Not null :
当我们使用语句 insert into student(id) values (null); 时,我们发现根本不能插入,因为我们插入的数据规定不能为空。
unique:
我们先创建一个表,id是unique,表示id这列的值是不能相同的。
我们插入这些数据:
insert into student values(1, 'Java1班', 100),(2, 'Java2班', 102),(3, 'Java3班', 102);
我们目前有这些数据,如果想插入(1,Java4班,103)这个数据是不可以的
default:
primary key:
我们可以一个列创建主键
这样我们就把id设置为表的主键了。
当然我们也可以多列一起设置主键
这样我们就可以设置两列一起为主键了
foreign key:
设置外键的时候,需要两个表,第一个表中有主键/unique,第二个表才可以设置外键。
当我们设置外键后,如果想删除主表中的数据是不可以的,除非是先删除子表的数据,再删除主表的数据。
⭐问题 :在淘宝中,当我们子表数据引用父表数据后,父表数据想下架怎么办?
答:可以把父表隐藏。
我们可以搭配其他业务代码。设置字段 isok,比如过去列表的时候,按照ok字段再筛选下。
表的关系
一对一
一对多
多对多
查询进阶
查询搭配插入:
查询student2表数据插入student表中,表的列和类型要互相匹配。
(1) 当前student2表中有3条数据,student表中没有数据。
(2)使用语句 select into student select * from student2;
这样我们就把student2表的数据插入student表中了。
聚合函数:
count: 返回查询到的数据的数量
sum:返回查询到的数据的总和,不是数字没有意义
avg:返回查询到的数据的平均值,不是数字没有意义
max:返回查询到的数据的最大值,不是数字没有意义
min:返回查询到的数据的最小值,不是数字没有意义
当前我们的表中数据如下
count:统计班里多少同学
select count(*) from student;
sum :统计年龄总和
select sum(age) from student;
avg:统计班里平均年纪
select avg(age) from student;
max:统计年龄最大值
select max(age) from student;
min:统计年龄最小值
select min(age) from student;
分组查询:
我们使用分组查询的时候要搭配聚合函数。
表如下:
group by
当我们查每个id的最大值和最小值以及平均值
select id, max(age), min(age), avg(age) from student group by id;
where与group by
where条件写在group by前面
当我们查id=1的最大值和最小值以及平均值
select id, max(age), min(age), avg(age) from student where id = 1 group by id;
group by与having
GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用HAVING
显示平均年龄大于20的id
select id, avg(age) from student group by id having avg(age) > 20;