行业动态

【软件测试】数据库基础面试题汇总(三)

  众所周知,在软件测试中,数据库是必备知识,也是基础中的基础。今天小编继续整理了关于数据库基础的试题汇总,希望和大家一起分享,现在赶紧来看看吧!

【软件测试】数据库基础面试题汇总(三)

  一、数据库的优化?

  1.优化索引、SQL 语句、分析慢查询;

  2.设计表的时候严格根据数据库的设计范式来设计数据库;

  3.使用缓存,把经常访问到的数据和不需要经常变化的数据放在缓存中,能节约磁盘 IO;

  4.优化硬件,采用 SSD,使用磁盘队列技术(RAID0,RAID1,RDID5)等;

  5.采用 MySQL 内部自带的表分区技术,把数据分成不同的文件,能够提高磁盘的读取效率;

  6.垂直分表,把一些不经常读的数据放在一张表里,节约磁盘 I/O;

  7.主从分离读写,采用主从复制把数据库的读操作和写入操作分离开来;

  8.分库分表分机器(数据量特别大),主要的的原理就是数据路由;

  9.选择合适的表引擎,参数上的优化;

  10.进行架构级别的缓存,静态化和分布式;

  11.不采用全文索引;

  12.采用更快的存储方式,例如 NoSQL 存储经常访问的数据。

  二、Sql 注入是如何产生的,如何防止?

  程序开发过程中不注意规范书写 sql 语句和对特殊字符进行过滤, 导致客户端可以通过全局变量POST 和 GET 提交一些 sql 语句正常执行。产生 Sql 注入。下面是防止办法:

  1.过滤掉一些常见的数据库操作关键字,或者通过系统函数来进行过滤;

  2.在 PHP 配置文件中将 Register_globals=off;设置为关闭状态;

  3.SQL语句书写的时候尽量不要省略小引号(tab 键上面那个)和单引号;

  4.提高数据库命名技巧,对于一些重要的字段根据程序的特点命名, 取不易被猜到的 e.对于常用的方法加以封装,避免直接暴露 SQL 语句开启 PHP 安全模式:Safe_mode=on;打开 magic_quotes_gpc 来防止 SQL 注入;

  5.控制错误信息:关闭错误提示信息,将错误信息写到系统日志;

  6.使用 mysqli 或 pdo 预处理。

  三、NoSQL 和关系数据库的区别?

  1.SQL 数据存在特定结构的表中;而 NoSQL 则更加灵活和可扩展, 存储方式可以省是 JSON 文档、哈希表 或者其他方式。

  2.在 SQL 中,必须定义好表和字段结构后才能添加数据,例如定义表的主键(primary key),索引(index),触发 器(trigger),存储过程(stored procedure)等。表结构可以在被定义之后更新,但是如果有比较大的结构变更的话就会变得比较复杂。在 NoSQL 中,数据可以在任何时候任何地方添加,不需要先定义表。

  3.SQL 中如果需要增加外部关联数据的话,规范化做法是在原表中增加一个外键,关联外部数据表。而在 NoSQL 中除了这种规范化的外部数据表做法以外,我们还能用如下的非规范化方式把外部数据直接放到原数据集中,以提高查询效率。缺点也比较明显,更新审核人数据的时候将会比较麻烦。

  4.SQL 中可以使用 JOIN 表链接方式将多个关系数据表中的数据用一条简单的查询语句查询出来。NoSQL 暂未提供类似 JOIN 的查询方式对多个数据集中的数据做查询。所以大部分 NoSQL 使用非规范化的数据存储方式存储数据。

  5.SQL 中不允许删除已经被使用的外部数据,而 NoSQL 中则没有这种强耦合的概念,可以随时删除任何数据。

  6.SQL 中如果多张表数据需要同批次被更新,即如果其中一张表更新失败的话其他表也不能更新成 功。这种场景可以通过事务来控制, 可以在所有命令完成后再统一提交事务。而 NoSQL 中没有事务这个概念,每一个数据集的操作都是原子级的。

  7.在相同水平的系统设计的前提下,因为 NoSQL 中省略了 JOIN查询的消耗,故理论上性能上是优于 SQL 的。

  四、Mysql 数据库中怎么实现分页?

  select * from table limit (start-1)*limit,limit; 其中 start 是页码,limit 是每页显示的条数。

  五、Mysql 数据库的操作

  修改表-修改字段,重命名版:

  alter table 表名 change 原名新名类型及约束;

  alter table students change birthday birth datetime not null;

  修改表-修改字段,不重名版本:

  alter table 表名 modify 列名类型和约束; alter table students modify birth date not null 全列插入:insert into 表名 values(...)

  insert into students values(0,"郭靖", 1,"内蒙","2017-6");

  部分插入:值的顺序与给出的列顺序对应:

  insert into students(name, birthday) values("黄蓉","2017-8");

  修改:update 表名 set 列 1=值 1,列 2=值 2.。。where update students set gender=0, homwtown="古墓", where id = 5; 备份:mysqldump -uroot -p数据库名 > python.sql,

  恢复:mysql -uroot -p数据库名< python.sql

  六、存储过程和函数的区别?

  相同点:存储过程和函数都是为了可重复的执行操作数据库的 sql 语句的集合。 1)存储过程和函数都是一次编译,就会被缓存起来, 下次使用就直接命中已经编译好的 sql语句,不需要重复使用。减少网络交互,减少网络访问流量。

  不同点: 标识符不同, 函数的标识符是 function , 存储过程是proceduce。

  1)函数中有返回值,且必须有返回值,而过程没有返回值,但是可以通过设置参数类型(in,out)来实现多个参数或者返回值。

  2)存储函数使用 select 调用,存储过程需要使用 call 调用。

  3)select 语句可以在存储过程中调用,但是除了 select..into 之外的select 语句都不能在函数中使用。

  4)通过 in out 参数,过程相关函数更加灵活,可以返回多个结果。

  七、Mysql 开启 General-log 日志

  Show variables like ‘general%’; Set global general_log=1; Set global general_log=0;

  以上内容为大家介绍了数据库基础面试题汇总,本文由多测师亲自撰写,希望对大家有所帮助。了解更多软件测试相关知识:https://www.duoceshi.com/xwzx-hydt/

新闻资讯

联系我们

联系人:王老师

手机:15873483787

电话:0755-21072941

邮箱:hr@duoceshi.com

地址: 广东省深圳市龙华区龙华街道龙园社区人民路宾馆花园18栋信盈广场A栋4层

用手机扫描二维码关闭
二维码