在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
众所周知,在软件测试中,数据库是必备知识,也基础中的基础。今天小编继续整理了关于数据库基础的试题汇总,希望和大家一起分享,现在赶紧来看看吧!
一、数据库的优化?
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 注入。下面是防止办法:
a.过滤掉一些常见的数据库操作关键字,或者通过系统函数来进行过滤。
b.在 PHP 配置文件中将 Register_globals=off;设置为关闭状态
c.SQL语句书写的时候尽量不要省略小引号(tab 键上面那个)和单引号
d.提高数据库命名技巧,对于一些重要的字段根据程序的特点命名, 取不易被猜到的 e.对于常用的方法加以封装,避免直接暴漏 SQL 语句开启 PHP 安全模式:Safe_mode=on;
打开 magic_quotes_gpc 来防止 SQL 注入
h.控制错误信息:关闭错误提示信息,将错误信息写到系统日志。
i.使用 mysqli 或 pdo 预处理。
三、NoSQL 和关系数据库的区别?
a.SQL 数据存在特定结构的表中;而 NoSQL 则更加灵活和可扩展, 存储方式可以省是 JSON 文档、哈希表 或者其他方式。
b.在 SQL 中,必须定义好表和字段结构后才能添加数据,例如定义表的主键(primary key),索引(index),触发 器(trigger),存储过程(stored procedure)等。表结构可以在被定义之后更新,但是如果有比较大的结构变更的话就会 变得比较复杂。在 NoSQL 中,数据可以在任何时候任何地方添加,不需要先定义表。
c.SQL 中如果需要增加外部关联数据的话,规范化做法是在原表中增加一个外键,关联外部数据表。而在 NoSQL 中除了这种规范化的外部数据表做法以外,我们还能用如下的非规范化方式把外部数据直接 放到原数据集 中,以提高查询效率。缺点也比较明显,更新审核人数据的时候将会比较麻烦。
d.SQL 中可以使用 JOIN 表链接方式将多个关系数据表中的数据用一条简单的查询语句查询出来。NoSQL 暂未提供类似 JOIN 的查询方式对多个数据集中的数据做查询。所以大部分 NoSQL 使用非规范化的 数据存储方式存储数据。
e.SQL 中不允许删除已经被使用的外部数据,而 NoSQL 中则没有这种强耦合的概念,可以随时删除任何数据。
f.SQL 中如果多张表数据需要同批次被更新,即如果其中一张表更新失败的话其他表也不能更新成 功。这种场景可以通过事务来控制, 可以在所有命令完成后再统一提交事务。而 NoSQL 中没有事务这个概念,每一个数据集的操作都是原子级的。
g.在相同水平的系统设计的前提下,因为 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;
以上就是所有整理出来有关数据库基础的试题汇总,都是干货,大家赶紧收藏吧!
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
如何开展兼容性测试?兼容性测试有什么作用?
兼容性测试是指测试软件在特定的硬件平台上、不同的应用软件之间、不同的操作系统平台上、不同的网络等环境中是否能够很友好的运行的测试。兼容性测试是软件测试过程中必不可少的一个过程,没有兼容性测试的测试是不完整的测试,下面来分享怎么做兼容测试,希望能对大家有所帮助。
8219
2019-07-02 16:49:44
软件测试常见面试题分享
软件测试工作非常严谨,需要软测试工程师提供完善的测试用例以及测试报告。对测试环节中的测试目的、测试方法、测试内容、测试记录等等进行详细的说明。下面就和大家分享两个关于软件测试的常见面试题。
7451
2019-07-09 16:59:23
软件测试经典面试题之软件工程
小编今天来和大家分享软件测试经典面试题之软件工程(附答案),感兴趣的同学可以继续看下去。
7627
2019-07-10 15:40:23
博学谷软件测试常见问题汇总
博学谷软件测试常见问题汇总:编写测试计划的目的、测试人员在软件开发过程中的任务、一条软件缺陷(或者叫Bug)记录都包含了哪些内容、黑盒测试和白盒测试的优缺点、简述常用的Bug管理或者用例管理工具,并且描述其中一个工作流程、软件测试种类、Alpha测试与Beta测试的区别、什么是Bug。
7422
2019-07-12 15:21:20
2019软件测试工程师面试题汇总及答案
软件测试工程师在面试前想要做好充足的准备,可以刷一遍本文分享的面试题。这些汇总的面试题都是2019年最新整理出炉的,并附上了参考答案,其中包含了测试理论、Linux基础、数据库基础、API测试、App测试、管理工具等方面的知识点。可以说是,既有软件测试的基础知识,又有软件测试的所有知识重难点内容。有面试需求的小伙伴赶紧做一遍下面的面试吧!
12280
2019-09-29 10:25:27