一.表的设计:
1.第一范式:要求表中的列不可再分,否则就不是关系型数据库;
2.第二范式:在满足第一范式的基础上,消除部分函数依赖,出现在复合主键(多个候选键内),
如果有一列字段只依赖于一个主键,那么就将其删除,否则会出现数据冗余,更新异常,删除/增加异常;
3第三范式:在满足第二范式的基础上,消除传递依赖(非主键字段不能相互依赖);
关系模型{
一对一;
一对多;
多对多;
}
聚合函数
1,COUNT()
2.SUM();
3,AVG();
4,MIN();
5.MAX();
联合查询(表连接查询)
1.内连接
select * from table1,table2 where table1.xxx = table2.xxx;
select * from table1 join table2 on table1.xxx = table2.xxx;
表连接的执行过程
1,先计算参与表连接的笛卡尔积;
2,再通过筛选条件过滤无效数据;
3.再加入查询语句得到想要的结果行;
4精简列明;
2.外连接(左外和右外)
select * from table1 left join table2 on table1.xxx = table2.xxx;
select * from table1 right join table2 on table1.xxx = table2.xxx;
左右表中没有的用NULL填充;
3.自连接(自己和自己)
select * from table1 t1,table1 t2 where t1.xxx = t2.xxx;
把行转化成列
4.子查询
select * from table1 where id = (select * from table2 where id2 = xxx );
5,合并查询
select * from table1 union select * from table2;自动删除重复
select * from table1 union all select * from table2;不删除重复
注意:多个查询列表必须匹配,MYSQL不会进行校验.
6.视图
1.语法:create view view_name [(包含的列)] as 表名
2.删除:drop view view_name;
3.优点:
1.简单性:将复杂的查询语句封装,用户无需关注底层,只需要使用视图即可;
2.安全性:将敏感的字段隐藏;
3.逻辑数据独立性:即使表层结构发生变化,只需修改视图的字段即可
4.重命名列:用户可以根据自身需求增强视图的可读性;
7.索引:
索引是一种以高效查询为目的的一种数据结构(B+树);
优点:
1,叶子结点之间有相互连接的引用,在范围查询兄弟节点更方便;
2,所有的非叶子节点都在叶子节点上;
3,对于B+树而言,在相同树高的情况下,查询同一元素的复杂度相同,性能均匀;
页:页是内存和磁盘最小的交互单元。
页包含页头文件和页尾文件(其中包含了入上一页和下一页的地址等信息);
其次就是页主体部分:包含最小行和最大行分别组成单向链表的首位;
数据会被进行分组,每8条为一组,每一组对应生成一个糟用来存储每一组最后一条数据,以便于对数据进行CRUD;
索引分类
1,主键索引(依赖primary key的索引)
2,普通索引 (依赖自定义字段的索引)
3,唯一索引(依赖unique key的索引)
4,文本索引
5,聚集索引(若表中没有primary key那么就以第一个为unique 和 not null的列)
(非聚集索引):
回表查询:通过索引查找到索引记录,再返回主键索引树中查找完整记录
索引覆盖:当一个select语句使用普通索引且查询列表中的列刚好是普通索引的部分或全部
那么此时可以直接返回数据,而不用回表查询。

340

被折叠的 条评论
为什么被折叠?



