3.数据库
3.1 SQL 之连接查询(必会)
1**.左连接**(左外连接)以左表为基准进行查询,左表数据会全部显示出 来, 右表 如果和左表匹配 的数据则显示相应字段的数据,如果不匹配,则 显示为NULL;
2**.右连接**(右外连接)以右表为基准进行查询,右表数据会全部显示出 来, 右表 如果和左表匹配的数据则显示相应字段的数据,如果不匹配,则 显示为NULL;
3.全连接就是先以左表进行左外连接,然后以右表进行右外连接。
4.内连接: 显示表之间有连接匹配的所有行。
3.2 SQL 之聚合函数(必会)
聚合函数是对一组值进行计算并返回单一的值的函数,它经常与 select 语句中的 group by 子句一同使用。
- avg():返回的是指定组中的平均值,空值被忽略。
- count():返回的是指定组中的项目个数。
- max():返回指定数据中的最大值。
- min():返回指定数据中的最小值。
- sum():返回指定数据的和,只能用于数字列,空值忽略。
- group by():对数据进行分组,对执行完 group by 之后的组进行聚 合函数的运算,计算每一组的值。最后用 having 去掉不符合条件的 组,having 子句中的每一个元素必须出现在 select 列表中(只针对于 mysql)
3.3 SQL 之 SQL 注入(必会)
举例:
select admin from user where username='admin' or 'a'='a' and passwd=''or 'a'='a'
防止 SQL 注入,使用预编译语句是预防 SQL 注入的最佳方式,如
select admin from user where username=?And password=?
使用预编译的 SQL 语句语义不会发生改变,在 SQL 语句中,变量用问 号? 表示。像上面例子中,username 变量传递的’admin’ or ‘a’=‘a’ 参 数,也只会当 作 username 字符串来解释查询,从根本上杜绝了 SQL 注 入攻击的发生。
注意:使用 mybaits 时 mapper 中#方式能够很大程度防止 SQL 注入, $方式 无法防止 SQL 注入.
3.4 SQL Select 语句完整的执行顺序: (必会)
查询中用到的关键词主要包含六个,并且他们的顺序依次为 select–from–where–group by–having–order by 其中 select 和 from 是必须的,
其他关键词是可选的, 这六个关键 词的执行顺序如下:
from: 需要从哪个数据表检索数据
where: 过滤表中数据的条件
group by: 如何将上面过滤出的数据分组算结果
order by : 按照什么样的顺序来查看返回的数据
3.5 存储引擎(高薪常问)
3.5.1 概念
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使 用数据引擎进行创建.查询. 更新和删除数据。不同的存储引擎提供不同的存储机 制. 索引技巧.锁定水平等功能,使用不同 的存储引擎,还可以 获得特定的 功能。 现在许多不同的数据库管理系统都支持多种不同的数据引擎。 存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Archive, 5.Federated 。
3.5.2 InnoDB
InnoDB 底层存储结构为 B+树,B 树的每个节点对应 innodb 的一个 page, page 大小是固定的, 一般设为 16k。其中非叶子节点只有键值,叶 子节点包含完成数据。
适 用 场 景 :
1)经常更新的表,适合处理多重并发的更新请求。
2)支持事务。
3)可以从灾难中恢复(通过 bin-log 日志等)。
4)外键约束。只有他支持外键。
5)支持自动增加列属性 auto_increment。
3.5.3 TokuDB
TokuDB 底层存储结构为 Fractal Tree,Fractal Tree 的结构与 B+树有 些类似, 在 Fractal Tree 中,每一个 child 指针除了需要指向一个 child 节点 外, 还会带有一个 Message Buffer ,这个 Message Buffer 是一个 FIFO 的 队列, 用来缓存更新操作。 例如,一次插入操作只需要落在某节点的 Message Buffer 就可以马上 返回了,并不需要搜索到叶 子节点。这些缓存的更新会在查询时或后台异步合 并应用到对应的节点中。 TokuDB 在线添加索引,不影响读写操作, 非常快的写入性能, Fractal-tree 在事务实现上有优势。 他主要适用于访问频率不高的数据 或历史数据归档。
3.5.4 MyIASM
MyIASM 是 MySQL 默认的引擎,但是它没有提供对数据库事务的支 持, 也不支持行级锁和外键, 因此当 INSERT(插入)或 UPDATE(更新)数据 时即写操作需要锁定整个表,效率便会低一些。
ISAM 执行读取操作的速度很快,而且不占用大量的内存和存储资源。在 设计之初就预想数据组织 成有固定长度的记录,按顺序存储的。—ISAM 是 一种静态索引结构。 缺点是它不 支持事务处理。
3.5.5 Memory
Memory(也叫 HEAP)堆内存:使用存在内存中的内容来创建表。每 个 MEMORY 表只实际对应 一个磁盘文件。MEMORY 类型的表访问非常得 快, 因为它的数据是放在内存中的,并且默认使用 HASH 索引。但是一旦服 务关闭, 表中的数据就会丢失掉。 Memory 同时支持散列索引和 B 树索 引,B 树索引可以使用部分查询和通配查询,也可以使用和>=等操作符方便 数据挖掘,散列索 引相等的比较快但是对于范围的比较慢很多。
3.6 索引(高薪常问)
索引(I