MySQL进阶操作

 日升时奋斗,日落时自省

目录

一、数据库约束

 1.1约束类型

 1.2 null约束条件

 1.3unique 约束条件 

 1.4default约束条件 

 1.5primary key (主键)约束

 (1)具有 unique的特性

 (2)具有not null的特性

 1.6foreign key外键 约束

二、查询

1、聚合查询

1.1group by(分组)与 having条件

2、联合查询

 2.1内连接

 2.2外连接

 2.3自连接

 2.4子查询

 2.5合并查询

 3、总结


MySQL在初阶操作是一些简单操作,也是在以后最长用的,但是还没有约束条件的限制,不能算是完整的,数据库具有约束性

一、数据库约束

1.1约束类型

(1)not null(大小写不影响)存储列不为null

(2)unique 存储列必须是独一无二(无重复的)

(3)default 设置为空时的默认值

(4)primary key 翻译过来就是主键,主键是什么,主键就是独一无二的,为我们做查找的,他其实就是not null和unique 的结合版,不为空也是独一无二的

(5)foreign key 翻译后就是外键,外键就把和主键建立关系,两个表成了一种父子关系,当前表是子表,连接的表是父表(下面会演示)

(6)check 约束:check有检查的意思,在这里是限定我们要设置值,比如在输入性别时,仅限制在男女,check (sex ='男' or sex='女');

注:check在8版本MySQL是可以使用的也会生效,但是在5版本是不会生效的,但是不会报错

 1.2 null约束条件

使用方法:列 not null 

1.3unique 约束条件 

使用方法 : 列 unique

 

1.4default约束条件 

使用方法: 列 default 默认值

 1.5primary key (主键)约束

主键特性:不能为空,不能重复  

使用方法: 列 primary key

 (1)具有 unique的特性

 (2)具有not null的特性

 (3)主键表结构

(4)自增主键(特殊)

使用方法:primary key auto_ increment

 那浪费空间,当然浪费,但是对于数据来说很难有很大的数据,数据库可以支持上亿的数据,这点数据量还是很微小的,所以空间浪费并不大相对上亿的空间

 1.6foreign key外键 约束

外键使用:foreign key(列) references 主表(列)

主表的列要求:是带有主键

经过外键关联之后是不能轻易删除的

过度:

表的设计(当前很少见到)没有实例

一对一,一对多,多对多

 仅仅提一下

一对一: 就是当前 一个人只有一个身份证,

一对多:一个部门有多个员工

多对多:老师会带多个学生,一个学生多个老师的课程

二、查询

1、聚合查询

这里简单的几个常用聚合函数,仅仅需要一点点英语水平,不用担心

count : 计算个数的

sum :求和的,前提得是数字

max : 求最大值的

min : 求最小值的

avg :求平均值的

 以上函数都比较单一,其实打出来一个基本剩下的这些都就明白了

这里先提及其他两个表述条件使用,然后放在一起连用

1.1group by(分组)与 having条件

group by使用在where 的后面,在where条件之后可以加group by ,但是想把条件后面的话应该怎办,这时候就需要having 了,

先写条件语句,再分组,用where 

先分组,后写条件语句,用having

 一个大概的执行顺序

我们来使用一下group by

 (1)where 在前,group by 在后

 (2)group by 在前,having在后

 其他的函数这里就不一一列举了,按照前面MySQL执行顺序,合适时使用函数;

2、联合查询

联合查询就涉及到多个表

联合最开始进行一个笛卡尔积,

笛卡尔积:在查询的数据里解释就是 多表列之和,多表行之积

 当然笛卡尔积显示了所有,但是并不是我们所需要的,我们需要的是将两个表构建在一起

2.1内连接

可以用两种方法来连接

一种是where条件连接

select 列名 from 表名(可以多个)where 连接条件 and 其他条件

 另一种

 2.2外连接

外连接分为左连接,右连接

 2.3自连接

 想尝试其他的也可以尝试其他的,这里只简单的举个例,过个表中联系后进行,单个表的某些列的信息打印

使用例:

如果我们想要找同一个人的成绩进行对比,那就成为了行对比,但是MySQL里面没有行对比这一说,我们就需要把行转化为列

 自连接查询就是解决行与行之间的比较

2.4子查询

子查询其实很好了理解,当你要查一个重名的人员的所有信息时,我们应该怎么查,这里就可以用到子查询来解决,像套娃一样,相当于查询的是你想要值的子值,先找到子值,子值满足了,当前要求也就满足了,子值中也可以包含子值哈,无限套娃(哈哈哈)

缺点:子查询代码比较复杂,SQL语言此时可读性比较低,维护成本较高,执行效率也有很大的影响。

(1)单行子查询

单行子查询就比较单一了,只能进行一个子值的接收

 

(2)多行子查询

多行子查询,也可以进行,单行子查询,多行包括了1行

 学生表里有重复的两个名字,当不知道谁是重名的时候就需要先去找

例题:显示出所有重复名字的人员信息

 2.5合并查询

(1)union 具有or的作用,同时可以自动去重

使用方法: select 列 from 表 条件 union select 列 from 表 条件

合并查询有点像or 就是将两个查询结果都显现出来

 (2)union all 有or的作用,但是不能去重,是全部的

使用方法: select 列 from 表 条件 union all select 列 from 表 条件

(3)合并查询不仅仅只有or的作用,比or更加宽泛,union 和 union all可以在不同的表里面实现查询,但是查询有条件要求,需要列的类型相同,列的个数相同,列的名称相同

 3、总结

在插入的时候,尽量就一次插入多个元组,因为每次我给数据库添加数据的时候都需要花费一定的时间,所以当前一次多个元组能够减少不少的时间浪费,挺高效率。

数据是怎么来的呢,是有客户端通过MySQL进行输入给服务器的,服务器响应发送数据给在接收数据的客户端 

那就说MySQL是不是就这些了,其实不是,SQL也是编译语言,但是不太使用,也是存在想java一样的语言构造的(条件,循环,函数) 这些更复杂,执行效率不高,很少使用,耦合性比较高, 我们使用MySQL一般都是连接其他编译语言一起使用,更快,更便捷。

实现低耦合,高内聚

耦合:简单理解联系不紧密,就不会有很多麻烦的事情(耦合性低)

模块关联越大工作量就越大,

内聚:内聚就相当于代码排列一样,如果是分块排版就会有高的可读性,便于维护(高内聚)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL的触发器是一种在特定事件发生时自动执行的数据库对象。它们可以用于在表上插入、更新或删除数据时执行特定的操作。当你想要在数据库中进行更复杂的逻辑处理时,触发器是非常有用的。 以下是一些MySQL触发器的进阶概念和用法: 1. 触发器的语法:创建触发器时,你需要指定触发器的名称、触发器所在的表、触发器事件(如INSERT、UPDATE或DELETE),以及触发器要执行的动作。触发器可以在BEFORE或AFTER事件之前或之后触发。 2. NEW和OLD关键字:在触发器中,你可以使用NEW和OLD关键字来引用插入、更新或删除的数据。NEW关键字表示插入或更新后的数据行,而OLD关键字表示被更新或删除之前的数据行。 3. 触发器的类型:MySQL支持BEFORE和AFTER两种类型的触发器。BEFORE触发器在事件之前执行,可以用于修改即将插入、更新或删除的数据。AFTER触发器在事件之后执行,可以用于记录日志或执行其他操作。 4. 触发器的事件:触发器可以与INSERT、UPDATE和DELETE事件相关联。例如,你可以创建一个AFTER INSERT触发器,在每次插入新行时执行某些操作。 5. 触发器的应用场景:触发器可以用于实现数据完整性约束、自动更新关联数据、记录审计信息等。例如,你可以创建一个BEFORE INSERT触发器来验证插入的数据是否符合特定的规则。 总之,MySQL触发器是一个强大的工具,可以在特定事件发生时自动执行操作。通过触发器,你可以实现更

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值