前言:
对于一名测试人员来说,数据库的使用也是一项很基础的技能要求。因为绝大多数的应用都跟数据紧密相关,比如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)每列(或者每个属性)都是不可再分的最小数据单元,即符合原子性,而不能是集合,数组,记录等非原子数据项;
![](/qrcode.jpg)
举例子:高三(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 语句用于在已有的表中添加、修改或删除列。