测试眼中的数据库

前言:

对于一名测试人员来说,数据库的使用也是一项很基础的技能要求。因为绝大多数的应用都跟数据紧密相关,比如weixin,QQ,都需要存放大量的数据信息:联系人信息、发送的信息、朋友圈信息等等。这些信息绝大多数是存放在关系型数据库中。

因此,软件测试工程师对数据库的了解,是基本的要求。

一、数据库的本质(Mysql)

数据库的关系型数据库。

所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

1.1 RDBMS即关系数据库管理系统(Relational Database Management System)的特点

  • 1.数据以表格的形式出现
  • 2.每行为各种记录名称
  • 3.每列为记录名称所对应的数据域
  • 4.许多的行和列组成一张表单
  • 5.若干的表单组成database

关于RDBMS的一些术语

  • 数据库: 数据库是一些关联表的集合。
  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  • 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
  • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键:外键用于关联两个表。
  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。(关于索引,面试问的很多)
  • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

1.2 数据库存储遵循范式

数据库范式(Normal forms):是用于规范关系型数据库设计,以减少谬误发生的一种准则。范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,满足不同程度要求的为不同范式。

1、第一范式(1nf)

第一范式是关系型数据库的基础条件。

第一范式可以概括为:

(1)不允许出现重复的行;

(2)没有重复的列;

(3)每列(或者每个属性)都是不可再分的最小数据单元,即符合原子性,而不能是集合,数组,记录等非原子数据项;

举例子:高三(1)班的小红

这是不符合第一范式的,班级可以拆分成两个字段:年级+班级

2、第二范式(2nf)

第二范式就是任意一个字段都只依赖表中的同一个字段 ,即属性完全依赖于主键。 第二范式是指,首先满足第一范式,并且表中非主键列不存在对主键的部分依赖。

表中主键为 (学号,课程),可以看出表示所有非主键列 (成绩,课程学分)都依赖于主键。 但是,表中还存在另外一个依赖:(课程)->(课程学分)。这样非主键列 ‘课程学分‘ 依赖于部分主键列 ’课程‘, 所以上表是不满足第二范式的。

上面2个表,学生选课表主键为(学号,课程),课程信息表主键为(课程),表中所有非主键列都完全依赖主键。不仅符合第二范式,还符合第三范式。

上表中,主键为:学号,所有字段 (姓名,性别,班级,班主任)都依赖与主键,不存在对主键的部分依赖。所以是满足第二范式。

3、第三范式(3nf)

第三范式定义是,满足第二范式,并且表中的列不存在对非主键列的传递依赖,即消除对主键的传递依赖,简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

对于上面的学生信息表,虽然满足第二范式,所有字段都依赖主键(学号),但是,表中存在一个传递依赖,(学号)->(班级)->(班主任)。也就是说,(班主任)这个非主键列依赖与另外一个非主键列 (班级)。所以不符号第三范式。

学生信息表

班级信息表

这样,对主键的传递依赖就消失了。上面的2个表都符合第3范式。

1.3 数据库数据类型的存储

1、数据库数据存储本质是

数据库数据存储本质是存在磁盘里面的。

数据以磁盘块为单位存储在磁盘上。块分布于一张或多张盘片的同心环形磁道上。磁道可以在盘片的单面或双面上录制。

同一直径的所有磁道的集合称为柱面。

磁盘块的大小在磁盘初始化时可以被设置成扇区大小的倍数。

每一个记录的表面都有一个磁盘头阵列。读写一块时,磁头必须定位在块头位置。

不能并行读写的主要原因是很难保证所有磁头被精确定位在相应的磁道上。

磁盘控制器是磁盘驱动器与计算机的接口。

2、数据存储过程

在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。

存储过程的概念

存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

具体参考:https://blog.csdn.net/guxianga/article/details/1795619

二、数据库操作

2.1 数据库和表结构操作

1、创建数据库和表

create database dbname  和 create table tbname

2、对表字段的增删改查

ALTER TABLE 语句用于在已有的表中添加、修改或删除列。

原文地址:https://www.cnblogs.com/bianfengjie/p/9224498.html

时间: 2024-10-13 04:58:34

测试眼中的数据库的相关文章

测试用的数据库Transaction Log太大, 用于缩减它的脚本

记在这里, 备用. select name, recovery_model_desc from sys.databases where name = 'WSS_Content_1000' USE WSS_Content_1000 ; ALTER DATABASE WSS_Content_1000 SET RECOVERY Simple; go use WSS_Content_1000 go checkpoint go checkpoint go dbcc shrinkfile(WSS_Conte

SQL Server中使用数据库快照的方式来完成测试环境中数据库的轻量级备份还原操作

原文:SQL Server中使用数据库快照的方式来完成测试环境中数据库的轻量级备份还原操作 在开发或者测试环境的数据库中,经常会发现有开发或者测试人员误删除表或者数据的情况,对于开发或者测试库,一般都没有安排定时的备份任务去备份数据库,一方面是由于存储资源有限,不太可能给开发或者测试环境准备大量的存储空间,二是必要性不是很强,开发或者测试库的数据库对象变化太多,通过还原备份的方式又有可能冲掉其最近新建的数据库对象.但是不得不面对的问题就是个别人在执行update或者delete操作的时候“忘了加

Jmeter关于数据库的测试(mysql数据库)

建立jdbc链接:创建JDBC Connection Configuration. 添加——配置元件——JDBC Connection configuration: 配置JDBC Connection configuration: 说明: 1)Variable Name:数据库(database)连接池的名字,这个很重要,必填,JDBC Request中会用到. 2)Max Number of Connections:最大连接数 3)Pool Timeout:数据库连接池的超时最大的时间 4)I

php中使用mysqli和pdo扩展,测试连接mysql数据库的效率。

<?php /** * 测试pdo和mysqli的连接效率,各连接100次mysql数据库 */ header("Content-type:text/html;charset=utf8"); //通过pdo链接数据库 $pdo_startTime = microtime(true); for($i=1;$i<=100;$i++){ $pdo = new PDO("mysql:host=localhost;dbname=test","root&q

菜鸟眼中的数据库 SQLSERVER

用这篇文章来帮助自己学习下数据库的知识.马上要换东家了.或许能够用的上! 2015年9月9日18:40:23 数据库是一个很高端的东西.装的都是最原始的数据. 首先说说我印象中的数据库: 用来存放数据的地方.里面有资料库(Database),数据表(Table) 我们能对数据操作:增(Insert)删(Delete)查(Select)改(Update)放在一起就是IDSU(爱的是you) 好像就那么回事! 然而数据库是这样的. 操作数据库得了解一下这些! SQL分类: DDL:数据定义语言(Cr

如何测试连接MsSQL数据库-------UDL文件

http://www.xinnet.com/service/cjwt/idc/sjk/1360.html 如果您所使用的 SQL Server 数据库连不上,可以通过这个方法进行测试数据库连接. 温馨提示: .本方法只适用于测试SqlServer数据库连接,请核对您输入的是SqlServer的数据库信息.本文档不适用于MySql数据库. 测试连接方法: 1.打开记事本,不要写任何字,然后保存为 dsds.udl (即为重命名)到桌面. 2.双击刚刚保存的文件. 3.输入数据库的地址,数据库账号,

SQL手工注入漏洞测试(Sql Server数据库)

还是先找到注入点,然后order by找出字段数:4 通过SQL语句中and 1=2 union select 1,2,3……,n联合查询,判断显示的是哪些字段,就是原本显示标题和内容时候的查询字段.此处返回的是错误页面,说明系统禁止使用union进行相关SQL查询,我们得使用其他方式进行手工SQL注入. 一.盲注 盲猜爆出表名 通过SQL语句中的and exists(select username from manage)查询,判断manage数据库表表中存在的字段.此处返回内容为正常页面,说

80、SQL手工注入漏洞测试(MySQL数据库)

原文引用https://www.dazhuanlan.com/2019/08/25/5d62593d1d0a1/ 访问网页,进入登陆下方的滚动公告,进行测试注入点?id=1 and 1=1返回正常,?id=1 and 1=2 返回错误,说明有注入点.?id=1 order by 5查询列数.一直减少,直到页面返回正常?id=1 and 1=2 union select 1,version(),database(),4查询版本和数据库名称(此时知道数据库为mozhe_Discuz_StormGro

数据库---视图,触发器,事务,存储过程 ,函数,流程控制, 索引与慢查询优化,测试索引,数据库三范式(简介)

视图 1.什么是视图 ? 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 ? 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 强调 1.在硬盘中,视图只有表结构文件,没有表数据文件 2.视图通常是用于查询,尽量不要修改视图中的数据 drop