面试小知识--数据库
一.Mysql
1.SQL的select语句的完整执行顺序
1.from子句组装来自不同数据源的数据
2.where子句基于指定条件进行筛选
3.group by 子句将数据划分为多个分组
4.使用聚合函数进行计算
5.使用having子句进行筛选分组
6.计算所有表达式
7.select 字段
8.order by对结果集进行排序
2.SQL聚合函数
1.聚合函数是对一组进行计算并返回单一值的函数,经常与select语句中的使用
1)avg():返回平均值 ,空值忽略
2)count():返回指定的个数
3)max(): 返回最大值
4)min():返回最小值
5)sum():返回指定数据和
6)group by():数据分,对group by之后的组进行聚合函数得到运算,计算每一组的值。
3.SQL之连接查询
左连接:以左表为基准查询 右表和左表匹配显示 不匹配显示为null
右连接:以右表为基准查询 右边全部显示 左表匹配的才显示相应的字段 不匹配 显示为null
全连接: 先以左表进行左外连接 ,在以右表进行右外连接
内连接: 显示表之间连接匹配所有行
4.SQL注入
sql语句恒成立
防止sql注入的方式:
1.预编译语句 2.Mybatis框架中的mapper方式中的#也能很大程度防止sql注入
5.mysql性能优化
1.当只要一行数据时使用limit 1
2.选择正确的数据库引擎
3.not exists 代替 not in
not exists 可以发挥索引的作用 not in不能使用索引 not in最慢的方式要同每条记录进行比较,数据量大的情况不建议使用这种方式
4.对操作符进行优化,尽量不采用不利于索引的操作符
比如: in not in is null is not null
6.Mysql架构器中的各个模块都是什么?
1)连接管理与安全验证是什么?
每个客户端都会建立一个与服务器连接的线程,服务器会有一个线程池来管理这些连接 如果客户端接到mysql数据库还需要进行验证,包括用户名,密码,主机信息
2)解析器是什么?
解析器的作用主要是 分析查询语句,最终生成解析树;解析器首先对查询语句进行分析,分析语法是否有问题。还有解析器会查询缓存,如果在缓存中有对应语句,就返回查询结果不进行接下来的优化操作。前提是缓存中的数据没有被修改,当然入锅被修改了也会被清出缓存
3)优化器怎么用
优化器主要对查询语句进行优化选择,包括选择适合的索引,数据的读取方式,包括获取查询的开销信息,统计信息等,这是为什么图中会有优化器指向存储引擎的箭头
4)执行器什么?
执行器包括查询语句,返回查询结果,生成执行计划包括与存储引擎的一些处理操作
7.SQL事务介绍
一组命令都执行或者都不执行
事务的四大特性:
ACID 原子性(Atomicity),一致性(Correspondence),隔离性(lslation),持久性(Durability)。
原子性:整个事务中的操作要么全部完成,要么全不完成,不可能停止在中间的某环节。事务发生回滚,就像没执行过一样
一致性:在事务开始和结束后 数据库的完整性没有被破坏
隔离性:隔离状态执行事务,他们好像是系统给定的时间内执行的唯一操作。如果有两个事务,运行在 相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务,防止串行化,以及事务间的操作混淆。
持久性:在事务完成以后,该事务对数据库所做的更改便持久的保存在数据之中
8. 事务的四种隔离级别
隔离级别 脏读 不可重复读 幻读
读未提交 是 是 是
读已提交 否 是 是
可重复读 否 否 是
串行读 否 否 否
读未提交: 读未提交就是脏读 事务可以读取其他事务未提交的数据
读已提交: 事务在未提交所做的修改其他事务是不可见的
可重复读: 保证同一个事务的多次查询的结果一致
客串化: 可串行化就是保证读取的范围内没有新的数据的插入,比如事务第一次查询得到的某个范围的数据,第二次查询2也得到相同范围的数据,中间没有新的数据插入到该范围内。