软件测试面试题总结(二)- 数据库知识点

持续更新参加面试过程中,遇到的软件测试相关的面试题,包括:项目管理、测试理论、python基础、数据库、团队管理等等。

1. 关系型数据库和非关系型数据库

1.1 数据库分类

关系型数据库非关系型数据库(分布式数据库)中间件
MysqlMongoDB(文档型数据库)数据库中间件有以下4种:1、分表分库中间件 ;2、数据增量订阅与消费中间件; 3、数据库同步中间件;4、跨数据库(数据源)迁移中间件。
SQL ServerRedis(键值对存储数据库)常见的数据库中间件工具有:1、Cobar;2、DRDS;3、MyCat;4、Atlas;5、OneProxy。
OracleHBase

1.2 数据库存储类型

关系型数据库:基于表存储数据,SQL是一门结构化语言。

非关系性数据库(分布式数据库):使用键值对、文档或图形动态存储数据。

1.3 数据库处理业务

SQL支持复杂的业务,可以进行多表联合查询,支持复杂的多表联合查询

NoSQL数据库存储结构不固定,不支持复杂的联合查询

1.4 数据库事务

SQL遵循严格的事务一致性ACID属性(事务的特性:原子性、一致性、隔离性和持久性)

NoSQL支持分布式CAP原理(一致性、可用性和分区容错性)

事务(Transaction):在数据库中,事务是指一组数据库操作,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单元,mysql事务应用广泛,特别是开发高并发系统时,事务可以保证数据的完整性和一致性:银行转账、订单处理、库存管理、日志记录

原子性逻辑上是不可分割的操作单元,事务的所有操作要么全部提交成功,要么全部失败回滚(用回滚日志实现,反向执行日志中的操作)
一致性事务的执行必须使数据库保持一致性状态。在一致性状态下,所有事务对一个数据的读取结果都是相同的
隔离性一个事务所做的修改在最终提交以前,对其它事务是不可见的(并发执行的事务之间不能相互影响)
持久性一旦事务提交成功,对数据的修改是永久性的

一致性所有节点在同一时间具有相同的数据
可用性保证每个请求不管成功或者失败都有响应
区分容错性系统中任意信息的丢失或失败不影响系统的继续运行

2. MySql和Redis的选择

1. redis 读写效率高,性能好,成本高,所以会用在对性能要求高的场合,如:抢购、秒杀、实时排行榜

2. mysql 可以存储大量数据,持久化到硬盘,性价比高。在性能要求不那么高的场合均建议使用

3. redis 持久化:由于redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失,于是需要开启redis持久化功能,将数据保存在磁盘上。redis 重启后可以从磁盘恢复数据。

本质区别:

mysql主redis辅:加快访问读取速度,提高性能

mysql数据放在磁盘:mysql作为持久化存储的关系型数据库,相对薄弱的地方在于每次访问数据库时,都存在IO操作,如果频繁访问数据库:1. 会在反复连接数据库上花费大量时间,导致运行效率慢,2. 反复访问数据库也会导致数据库负载过高

redis数据存在内存,读取数据极快,成本高,断电数据就清零,需要做持久化

使用场景

mysql 支持复杂的联合查询,可以实现一些关联的查询和统计

redis 对内存要求极高,在有限的条件下不能把所有的数据都放在redis中

mysql 偏向于存数据,redis 偏向于快速读取数据

3. 数据库结构化查询语句

连接多个表使用JOIN语句连接多个数据表,进行联合查询
排序数据使用ORDER BY 语句对查询结果进行排序 DESC ASC
分组数据使用GROUP BY语句对查询结果进行分组
过滤数据使用WHERE 子句根据条件过滤查询结果
统计数据使用聚合函数如COUNT、SUM、AVG等对数据进行统计
备份和恢复数据使用mysqldump明亮备份数据库,使用mysql命令导入备份数据进行恢复
distinct获取唯一结果

4. mysql三种删除 delete truncate drop 

delete:通过过滤条件删除数据
delete from student order by age desc limit 3;
truncate: 不能加条件表达,删除所有数据
truncate student;
drop:表结构和表数据都删除
drop table student 

5. mysql 表添加字段 alter 

在表尾添加字段;
alter table student add age int(4);
在表头添加字段
alter table student add age int(4) first;
在指定位置添加字段
alter table student add age int(4) after name;

6. mysql 多表联合查询

select t1.sid, t1.name ccount, sscore from student t1
join
(select sid, count(cid) as ccount, sum(score) as sscore from sC group by sid) sc
on t1.sid = sc.sid;

mysql distinct 用于去重

7. MySQL索引

索引是帮助MySQL高效获取数据的数据结构,数据库索引类似一本图书的目录,能加快数据库的查询速度 索引提高了查询效率,但同时也降低了更新表的效率:update、insert、delete,索引占内存

a. 单列索引:一个索引只包含单个列,但是一张表可以有多个索引

  • 普通索引:mysql中基本索引类型,无限制,允许在定义的索引列插入重复值和空值,存粹是为了查询速度快一点
  • 唯一索引:索引列的值必须是唯一的,但允许空值
  • 主键索引:是一种特殊的唯一索引,不允许有空值

b. 组合索引

c. 全文索引

8. MySQL关键字

1. where 在分组和聚合之前筛选数据,用于表数据过滤
2. having 在分组和聚合之后筛选数据,用于组数据过滤

1. UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行,
UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同.
2. UNION ALL 不消去重复的行

1. 左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
2. 右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。 

9. 查找语句

面试过程经常会问到,多表联合查询的sql语句,讲老实话可视化工具,一张表一张表也能查到...

9.1. 查找选课学生的名字和平均成绩

解释:这里需要使用左连接和子查询,需要注意的是,在做**多表查询**,或者查询的时候**产生新的表**的时候会出现这个错误:Every derived table must have its own alias(**每一个派生出来的表都必须有一个自己的别名**)

select sname, avgmark from tb_student t1 join (select sid, AVG(mark) as avgmark from tb_score group by sid) t2 on stuid=sid;

9.2. 查询每个学生的姓名和选课数量(左外连接和子查询)

select sname, countcid from tb_student t1 join (select sid, COUNT(cid) as countcid from tb_score group by sid) t2 on stuid = sid;

9.3. 查询平均成绩大于60分的同学的学生编号和学生姓名和平均成绩

select stuid, sname, avgmark from tb_student t1 join (select sid, AVG(mark) as avgmark from tb_score group by sid having avgmark>60) t2 on stuid = sid;
`select stuid, sname, avg(mark) from tb_student as stu, tb_score as s where stu.stuid=s.sid group by sid having AVG(mark) > 60;

持续更新......

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值