MySQL



1.group by 和 having


  • group by:按照某个字段或者某些姿端进行分组
  • having:对分组之后的数据进行再次过滤。

注意:分组函数一般都会和group by联合使用。这也是为什么它被称为分组函数的原因,并且任何一个分组函数(count sum avg max min)都是在group by语句执行结束之后才会执行的。当一条sql语句没有group by的话,整张表的数据会自成一组。

select ename,max(sal),job from emp group by job;
会报错,记住一条规则:当一条语句中有 group by的话,select后面只能跟分组函数和参与分组的字段。

  • select max(sal),deptno from emp group by deptno having max(sal) > 2900;
  • select max(sal),deptno from emp where sal > 2900 group by deptno;
  • 第一种方式效率低,第二种效率较高,建议能够使用where过滤的尽量使用where

limit是sql语句最后执行的一个环节
select 5
···
from 1
···
where 2
···
group by 3
···
having 4
···
order by 5
···
limit 6
···;


2.普通删除delete就可以,还可以返回
删除大表:truncate table xx;//表被截断,不可回滚,永久丢失。

3.对于表结构的修改,这里不讲了,大家使用工具完成即可,因为在实际开发中表以蛋设计好之后,对表结构的修改是很少的,修改表结构就是对之前的设计进行了否定,即使需要修改表结构,我们也可以直接使用工具操作。修改表结构的语句不会出现在Java代码当中。出现在java代码当中的sql包括:insert、delete、update、select(这些都是表中的数据操作。)

4.not null约束只有列级约束,没有表级约束。
5.主键

  1. 添加了主键约束的为主键,主键字段中的数据不能为null,也不能重复。
  2. 主键约束:primary key
  3. 主键字段:id字段天捡primary key之后,id叫做主键字段
  4. 主键值:id字段中的每一个值都是主键值
  5. 主键的作用:表的设计三范式中有要求,第一范式就要求任何一张表都应该有主键;主键值是这行记录在这张表当中的唯一标识。(类似身份证号);

主键的分类:

  • 根据主键字段的字段数量来划分:单一主键(推荐的,常用的);复合主键(多个字段联合起来添加一个主键约束,但复合主键不建议使用,因为符合主键违背三范式)
  • 根据主键性质来划分:自然主键:业务主键(主键值和系统的业务挂钩,例如:拿着银行卡的卡号做主键,拿着身份证号码作为主键。这种也不推荐用)
  • 最好不要拿着和业务挂钩的字段作为主键。因为以后的业务以蛋发生改变的时候,主键值可能也需要随着发生变化。但有的时候没有办法变化。因为变化可能会导致主键值重复。
  • 一张表的主键约束只能有一个!!!
  • auto_increment :id字段自动维护一个自增的数字,从1开始,以1递增。非常重要