设计范式
第一范式(二维数据表)
第二范式(要求数据表中非关键字不存在对组合关键字中字段函数依赖)
第三范式(要求数据表中非关键字不存在对组合关键字中字段或单一关键字的函数依赖)、BC范式(如果是复合关键字,可选的复合关键字之间不能存在函数依赖)
存储引擎
mysql目前最常用的存储引擎是Innodb
数据库设计原则
避免使用触发器:
因为会降低数据导入的效率,还可能出现意想不到的数据异常,或者是业务逻辑变得复杂,不利于维护(有可能后续维护的人不知道触发器的存在,项目运行的时候依然会触发触发器,使理解变得困难)
禁止使用预留字段:
数据库索引优化:
数据库表优化:垂直拆分、水平拆分
数据库基础
Join从句:
- Inner Join
- Left Outer Join
- Right Outer Join
- Full Join(实际上是左连接和右连接的合集)
My SQL 不支持Full Join查询,可采用UNION ALL 左连接和右连接来实现Full Join的查询结果
- cross join笛卡尔连接
笛卡尔连接不需要提供连接关键词。
查询结果集中数据条数 = user1中数据条数 * user2中数据条数
- 使用join更新表
MySQL不支持更新包含在from从句中的表(即过滤条件中包含自身的表)
支持更新Update从句中的表
- 使用join优化子查询
优化前:
优化后:(减少子查询的次数,缩短查询时间)
- 使用join优化聚合查询
查询取经四人组中成员各自打怪最多的日期
优化前:
优化后:(减少子查询,降低查询时间)
HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 和 SELECT 的交互方式类似。WHERE 搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中显示的任意项。
- 实现分组选择数据
查询孙悟空、沙僧、猪八戒、唐僧打怪数量最多的两个日期
分别查询,使用的查询语句:
使用join查询语句一次查出所有数据: