Bootstrap

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一般都是连接其他编译语言一起使用,更快,更便捷。

实现低耦合,高内聚

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

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

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

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;