马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、数据库束缚
1、束缚范例
NOT NULL - 指示某列不能存储 NULL 值
UNIQUE - 包管某列的每行必须有唯一的值
DEFAULT - 规定没有给列赋值时的默认值
PRIMARY KEY - NOT NULL 和 UNIQUE 的连合。确保某列(或两个列多个列的连合)有唯一标 识,有助于更轻易更快速地找到表中的一个特定的纪录
FOREIGN KEY - 包管一个表中的数据匹配另一个表中的值的参照完备性
2、NOT NULL束缚
创建列表的时间,指定某一列不为空
3、UNIQUE束缚
指定某一列为唯一的,不重复的
不光限定插入,也限定修改
该束缚会让后续插入/修改数据的时间,都触发一次查询,通过这个查询来判定这个纪录是否存在
4、DEFAULT束缚
喵叔这一列的默认值,默认的默认值是null,可通过default束缚来修改默认值
5、PRIMARY KEY束缚
一张表里只能有一个primary束缚
对带有主键的表来说,每次插入/修改也会触发先前查询的使用
auto_increment,把主键的天生交给数据库来实验
但是id的主动分配有肯定的范围性
分布式体系天生唯一id的算法
时间戳+主机编号+随机因子
时间戳:格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至如今的总秒数
主机编号:为了包管同一时间,添加到差异主机的商品编号是差异的
6、FOREIGN KEY束缚
foreign key,外键束缚,形貌两个表的关联关系
若father表束缚child表,则把father表称为父表,child称为子表
reference:引用,此处表明白该表的这一列数据应出自另一个表的哪一列
foreign key(name) reference father(name)子表的name应出自父表的name
若针对父表举行修改/删除使用,当前被使用的值被引用了如许的使用也会失败
外键束缚要保持子表的数据在对应的父表中要存在,万一父表将数据修改了,就突破了束缚
外键:两个列产生接洽,其他列不受影响
想删除父表,若父表中的数据被引用了,是不能删除的
指定外键束缚的时间,要求父表被关联的那一列是主键或unique
注:
数据库引入束缚的时间,实验服从会受到影响,低沉很多
数据库是比力慢的,很吃资源的体系,摆设数据库的服务器轻易成为一个体系的瓶颈
二、表的计划
根据现实的需求场景,明确当前要创建几个表,这些表是否存在肯定的接洽
梳理清晰需求的实体(对象),再确定好实体之间的关系
每个实体都必要安排一个表,表的列对应实体的各个属性
一对一:如一个弟子只能有一个帐号,一个账号只能被一个弟子拥有
一对多:一个同砚只在一个班级里,一个班级有多个同砚
多对多:一个同砚可选多个课程,多个课程包罗多个弟子
插入搭配查询:将查询到的语句作为插入的数值
要求插入的效果聚集列数/范例和插入的这个表匹配
三、聚合查询
相当于在行与行之间运算
通过聚合函数完成上述运算
1、聚合函数
count():查询行数,别的count(*)得到的效果可以被用来运算
若当前的列中有空值,两种方式[count(*)和count(列名)]盘算的count就差异了
指定详细列可举行去重:count(dlistinct 列名)
Sum():仅回查询的数据总和,不是数字没故意义
avq():返回查询的数据匀称值,不是数字偶然义
max():返回查询的数据最大值,不是数字偶然义
min():返回查询的数据最小值,不是数字偶然义
sum(列名,列名...):把对应的列名相加,得到一个暂时表,再把暂时表的效果举行行与行的相加
2、group by
group by:举行分组,针对每个组再行聚合查询
若举行分组时不举行聚合,效果就是查询每一组的某个代表函数
每每照旧搭配聚合函数来使用,否则这里的查询效果就没故意义(group by要搭配聚合函数使用)
select 列名,列名...from 表名 group by 指定列
指定列每组所纪录的指定命据是类似的
使用group by,还可以搭配条件,但应区分清是该条件楚分组前的照旧分组后的
分组之前的条件:直接使用where即可,where-般写在 group by 前面
分组之后的条件:用heaving来形貌条件,heaving-般写在qroupby背面
同时完成以上两类条件的筛选
同时使用heaving 和 where,且 where 放在 group by 前,heaving 放背面
3、连合查询/多表查询
笛卡尔积是通太过列组合来得到个更大的表,列数是两个表的列数相加,行数是两个表的行数相乘
笛卡尔积是简朴无脑的分列组合,把全部的大概都穷举了一遍,包罗一些正当的数据,也包罗非法、偶然义的数据,举行多表查询的时间,必要把故意义的数据筛选出来,偶然义的数据过滤
3.1、内毗连
1、先对两个表举行笛卡尔积
2、加上毗连条件
3、连合需求,进一步添加条件,针对效果举行筛选
4、针对查询到的效果举行精简,只保存需求中关心的列
select 字段 (聚合查询) from 表1 别名1,表2 别名2 where毗连条件 and 其他条件 (group.by)
一旦表的数据量大或表的数目多,此时得到的笛卡尔积就非常巨大,针对大表举行笛卡尔积,就会天生大量的暂时效果,非常耗时
如果多表查询间涉及的表数目非常多,此时sql就会非常复杂,可读性会大大低沉
3.2、外毗连
若两个表中,内里的纪录存在对应关系,内毗连和外毗连的效果是同等的,若存在不对应的纪录,内毗连和外毗连就会存在差异
左外毗连就是以左侧表为是准,包管左侧表的每个数据都会出如今右侧表,若右侧表中不存在,对应的列就填成null
右侧表同理
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |