MySQL增删查改进阶

  • 数据库约束
  • 表的关系
  • 增删查改

目录

一.数据库约束类型

NOT NULL约束类型

UNIQUE 唯一约束

DEFAULT 默认值约束

PRIMARY KEY:主键约束

FOREIGN KEY :W外键约束

二,查询

count()两种用法

sum,avg,max,min用法

​编辑

GROUP BY 子句

HAVING 条件

三,联合查询

内连接

外联结

自连接

子查询

合并查询


一.数据库约束类型
  • NOT NULL --只是表的某一列不能储存NULL值
  • UNIQUE --保证某列的每行必须有为一值
  • DEFAULT -- 规定没有给列赋值时的默认值
  • PRIMARY KEY -- 是NOT NULL 与 UNIQUE 的结合。确保某列有唯一标识,有助于快速特定寻找表中一个特定记录
  • RFOREIGN KEY --保证一个表中的数据匹配到另一个表中的值的参照完整性
  • CHECK --保证列中的值符合特定的条件。

NOT NULL约束类型

创建表时可指定,某列不为空

可以看到报错显示,id这一列不能为空,因为被NOT NULL修饰


UNIQUE 唯一约束

指定某一列的值唯一不可重复

创建stu表,指定name这一列被UNIQUE修饰,表中插入两个‘张三’,所以报错,插入失败。


DEFAULT 默认值约束

最初的默认值为NULL。插入数据时,如果某一列值为空,可以为其设定默认值

通过desc 表名 查看设置成功后的默认值

在未设置默认值前查看初始默认值

设置默认之后查看默认值


PRIMARY KEY:主键约束

指定某一列为主键,主键同时具有NOT NOLL 和UNIQUE的性质

主键通常搭配自增长auto_increment来使用。对于插入的数据对应的字段不给值时,使用最大值加一。

id这一列就是主键

自增长auto_increment什么意思?插入数据时可以不插入主键的值,让数据库自己分配,按照

1,2,3,4.....等顺序的模式,也可以手动指定其他数值,

这幅图中,在顺序插入前四个数据时,在自增主键的作用下再次插入数据是从4开始,还是从101开始嘞?答案是101,自增主键如果不指定数据,则默认从最大的值加一开始插入。

主键通常是某个表里的唯一身份表示,一般不允许存在多个主键,但是数据库里允许把多个列共同作为一个主键(联合主键),一般以数字作为主键,偶尔用字符串为主键。


FOREIGN KEY :W外键约束

外键用于关联其他主键唯一键

创建父表:

创建子表:

子表中的class引用自父表class中的class列class表中的数据制约啦stu表中的class

在子表中一定要确保插入的数据classid 在父表中存在。

插入:在子表中插入数据会触发对父表的查询,若没有对应的数据会报错

父表:class

在子表插入数据

在子表插入班级为6的学生会报错,因为在插入子表数据时会触发对父表的查询,父表不存在会报错。

在删除附父表中的记录被子表引用,就不能删除啦,应该先删除子表中的数据再回头删除附表中的数据

会报错,此时外键正在引用父表中的数据。

正确删除方法:

一定要确保删除子表再删除父表。


二,查询
  1. 聚合查询

常见的聚合查询函数有                 

COUNT([distinct] exper)      返回查询到的数量
SUM    ([distinct] exper)    返回查询到的数量总和
AVG     ([distinct] exper)    返回查询到数据的平均值,非数字为意义
MAX     ([distinct] exper)    返回查询到数据最大值,非数字无意义
MIN      ([distinct] exper)    返回查询到数据最小值,非数组无意义

count()两种用法

先对select 进行查询,根据结果再执行count

count(*)/  count(0) null也算进去

count(列名) null不算进去


sum,avg,max,min用法

GROUP BY 子句

select使用GROUP BY 子句可以指定列名进行分组查询。

使用group by 指定某一个列,就会把列值相同的行回到一个组中,分完组后还可以针对每个组进行聚合查询

select 列名 from 表名 group by 列名;

一个查询可以包括分组前的条件和分组后的过滤条件

在上述的条件下,排除张三


HAVING 条件

在GROUP BY 子句进行分组的后,要对分组结果进行条件过滤,不能使用where语句,要使用having

显示平均工资低于10000的角色和他的平均工资


三,联合查询
内连接

实际开发中数据往往来自不同的表,要多表联合查询,用一张表的每个记录去和另一个表的记录一一匹配就是笛卡尔积

以上四个表student包含学生个人信息,classes包含各个班级信息,coures包含课程,score包含个人分数

1.查询许仙的成绩

其中的,可以换成join where可以换成on 

2.查询所有同学的成绩及个人信息


外联结

select 字段名 from 表名1 left join 表名2 on 筛选条件

外连接于内连接相似,

查询‘老外学习中文’同学没有开始成绩,但是也要显现出来


自连接

自连接是指同一张表连接自身进行查询

SQL中进行条件查询,是针对列于列之间比较的,不能把比较行,如果把一个表自己与自己链接

就可以比较行。

注意:在进行自连接的过程中,两个表名不能相同,重命名其中一个表


子查询

子查询是嵌入再其他sql语句中的select语句,也叫嵌套查询

select*from 表名 where 列名 = (select 列名 from student where 条件);

查询与‘不行毕业同班同学’


合并查询

实际应用中,为了合并多个执行结果,可以使用集合操作符union,union all 

使用union 和union all 要求查询结果集中,字段一致。

select *from course where id<3 union select *from course where name='英文'

union取得结果集的并集,自动去除重复行

union all 不会去除重复行


  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值