前言:
本文为在霍格沃兹测试开发学社中学习到的一些技术写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~
mysql大体分为以下两部分:
连接器:连接管理,权限验证
注意:若管理员在用户连接过程中对用户进行权限更改,用户的权限会在下次连接时生效,本次连接不受影响。
查询缓存:命中直接返回结果
mysql拿到查询请求后会先去查询缓存中查看是否执行过此请求,如果查询在缓存中找到,则会将结果直接返回。
分析器:语法分析
如果请求没有命中查询缓存,则会开始进行请求分析。分析器去判断输入的SQL语句是否符合语法。
优化器:生成执行计划,选择索引
对语句进行执行优化。表中有多个索引时,决定用哪个索引;或者,当语句有多表关联时,决定多表的连接顺序
执行器:操作引擎,返回结果
首先判断用户是否有执行权限,若有,则打开表使用引擎执行语句,然后将结果返回;若没有,报错。
索引是存储的表中一个特定列的值数据结构。
常用的索引数据结构:B-Tree,因为时间复杂度比较低,因此常用。
索引包含一个表中列的值,并且这些值存储在一个数据结构中。
索引本身很大,不会全部存储在内存中,一般以文件的形式存储在磁盘上。
注意:一个表中创建的索引不要太多,最好不要大于五个。
语法:explain +SQL语句
id:表示查询序列号,查询中操作表的顺序,id值越大,优先级越高;id相同则由上至下顺序执行。
select_type:查询类型
table:输出结果集
type:访问类型,显示查询使用了哪种类型
possible_key:mysql可以使用的索引,NULL说明无索引可用
key:实际使用的索引
key_len:使用索引的长度
-ref:索引中哪一列被使用
rows:返回请求数据的行数
Extra:其他额外参数
注意:事务主要是用来处理操作量大,复杂度高的操作。mysql只有使用innodb数据库引擎才支持事务。
原子性(Atomicity)
一个事务中所有的操作要么全完成,要么不完成,不会出现处于中间某一个环节。事务执行过程发生错误则会回滚到初始状态。
一致性(Consistency)
事务开始之前和事务结束之后,数据库的完整性不会被破坏。也就是说,写入的数据必须完全符合预设的规则,包含数据的精确度、串联性等。
隔离性(Isolation)
持久性(Durability)
事务处理结束,对数据的修改结果是永久的,即时出现系统故障也不会丢失
begin: 开始一个事务
rollback:事务回滚
commit:事务提交
slow log:慢查询日志,超出预设的long_query_time阈值的SQL记录
general log:全局查询日志,所有SQL查询的记录
show variables like '%query%';
set global show_query_log='ON';
set long_query_time=0.01;
注意:慢查询日志对数据库性能消耗较大,若非调优需要,一般不建议启用。
修改日志存放方式:set global log_output='table';
查看表中保存的日志内容:select * from mysql.slow_log;
show variables like '%general%';
set global general_log='ON';
文末说明:
接口测试中我们很容易混淆Session、cookie和token,你知道他们有什么区别吗?快来跟我一起看,一篇文章让你了解三者的区别。
⬇⬇⬇⬇⬇⬇⬇
:接口测试经典面试题:Session、cookie、token有什么区别?