前言一.数据库是什么?1.大部分的软件都需要操作数据,比如游戏,社交,新闻,商城,财务等,这些软件都在不停地展示,存储数据,他们的数据都存储在数据库中,数据库是软件的基础.2.测试工程师在测试的过程中,不仅需要对页面操作,还需要检查数据库中的数据是否正确,比如测试注册登录功能时,提示注册成功,但使用刚注册的信息却登录不成功,这时候需要查询数据库中是否保存了正确的注册信息,如果数据库中没保存则使用刚才的注册账号肯定登录不成功,这样可以通过数据库定位问题:注册时 没有把数据保存起来.

二.常见的数据库分类

Oracle:在大型项目中使用,比如银行,电信等项目MySQL:web项目中使用最广泛Microsoft SQL server:在微软项目中使用SQL ite:轻量级数据库,主要应用于移动平台

三.SQL介绍sql语言:通过SQL语言对数据库进行操作.注意:对于测试工程师来说,重点是数据的查询,因此需要熟练掌握:DQL数据查询语言补充:在MySQL中,对SQL语法不区分大小写.

四.MySQL介绍

(熟悉SQL: 是指熟悉SQL语言 而熟悉MySQL 是指用过MySQL数据库)

五.数据库的远程连接

实际工作中数据库是安装在服务器中,如果直接连接数据库进行数据校验,必须远程连接

具体连接步骤:1.获取服务器的IP地址和数据库的账户登录密码2.在自己的电脑上 使用数据库工具(Navicat) 建立连接.远程连接数据库3.连接过程中需要确认自己的电脑和服务器是否能够正常通信 (ping 命令)

注意:(1)如果首次连接成功后,再次使用时,提示IP地址有问题,则需要重新获取虚拟机系统IP地址(2)使用过程中,要确保虚拟机系统不会待机或进入休眠状态

六.Navicat基本使用介绍1.数据库连接操作注意:连接只需要建立一次即可,在后续使用中可以"编辑连接",调整连接选项设置即可!2.数据库操作右键--新建数据库--数据库名(英文 字符集 utf-8 防止乱码 排序规则 默认如下图所示即可)

软件测试数据编写规范(干货软件测试常用的数据库操作)(1)

3.数据表操作数据库右键--创建表---输入字段 --保存时输入报名

软件测试数据编写规范(干货软件测试常用的数据库操作)(2)

4.数据操作

七.数据库的备份与还原(Navicat)平时测试时 测试前先备份数据 ,测试完之后还原数据 测试过程中会产生垃圾数据,测试结束时一般都需要还原原有数据,因此需要在测试结束时执行还原

备份操作

软件测试数据编写规范(干货软件测试常用的数据库操作)(3)

软件测试数据编写规范(干货软件测试常用的数据库操作)(4)

Finshed successfully 备份成功---点击 "关闭"即可

还原操作1.新建一个与备份数据设置相同的数据库2.运行上一步保存sql 文件即可

软件测试数据编写规范(干货软件测试常用的数据库操作)(5)

软件测试数据编写规范(干货软件测试常用的数据库操作)(6)

点击 开始即可

八.数据类型与约束常用数据类型整数 int小数 字符串 varchar日期时间约束主 键 :primary key非空:not null唯一 :unique默认值 :default外键:foreign key九.SQL 语言运行有两种方式,选中当前语句运行或直接全部运行

软件测试数据编写规范(干货软件测试常用的数据库操作)(7)

保存查询语句后,可以通过"查询窗口"来打开刚编辑的语句

软件测试数据编写规范(干货软件测试常用的数据库操作)(8)

多行注释 1,选中要注释的语句,2,使用快捷键 CTRL / 即可 3.取消注释 CTRL / 即可

软件测试数据编写规范(干货软件测试常用的数据库操作)(9)

1.创建表操作 create table 表名(); 删除表操作 DROP TABLE 表名;

创建表 CREATE TABLE 表名 ( 字段1 类型, 字段2类型, ....... ); 删除表 drop table goods; CREATE table goods( id int primary key auto_increment, //auto_increment 自动递增 goodsName VARCHAR(20), price DECIMAL(20), num int, company VARCHAR(20), beizhu VARCHAR(30) );

2.增加数据(主键列 是自动增长,插入数据时需要占位,通常使用0或者default或null来占位,插入成功后以实际数据为准)

-- 添加商品 -- 查询一次(查看当前表中的字段) select * from goods; -- 添加一条数据 insert into goods values (0,"联想笔记本",60000.00,100,"联想", "联想无极限,快乐你我他"); -- 插入的数据类型和数量和字段要匹配 -- 添加多条数据 insert into goods values (0,"联想笔记本",60000.00,100,"联想", "联想无极限,快乐你我他"); insert into goods values (0,"雷神笔记本",80000.00,90,"雷神", "雷神来了");

软件测试数据编写规范(干货软件测试常用的数据库操作)(10)

ALTER TABLE <表名> ADD <新字段名><数据类型>[约束条件]; 添加字段

3.修改数据(修改数据时 必须给出限定条件 where 后面的字段

修改数据前,先查询一下 select * from goods; UPDATE goods set price=4500.00,num=70,company="惠普",beizhu="惠普掉价了" WHERE id=4;

4.删除修改数据

-- 删除数据 -- 语法格式 delect from 表名 where 条件; -- -- 先查询所有数据 select * from goods; delete from goods where id = 4; -- 注意:执行删除数据时,务必给出限定条件,否则会删除所有数据

SQL语句 单表查询

查询数据 之基本查询:

drop table students; create table students( studentNo varchar(10) primary key, name varchar(10), sex varchar(1), hometown varchar(20), age tinyint(4), class varchar(10), card varchar(20) ); select * from students;-- 查询所有数据 select * from 表名; insert into students values ('001','王昭君','女','北京','20','1班','340322199001247654'), ('002','诸葛亮','男','上海','18','2班','340322199002242354'), ('003','张飞','男','南京','24','3班','340322199003247654'), ('004','白起','男','安徽','22','4班','340322199005247654'), ('005','大乔','女','天津','19','3班','340322199004247654'), ('006','孙尚香','女','河北','18','1班','340322199006247654'), ('007','百里玄策','男','山西','20','2班','340322199007247654'), ('008','小乔','女','河南','15','3班',null), ('009','百里守约','男','湖南','21','1班',''), ('010','妲己','女','广东','26','2班','340322199607247654'), ('011','李白','男','北京','30','4班','340322199005267754'), ('012','孙膑','男','新疆','26','3班','340322199000297655');

01.原表:select * from students 查询所有数据

软件测试数据编写规范(干货软件测试常用的数据库操作)(11)

02.查询 名字和年龄字段 修改"*"换成某个字段名即可,多个字段使用","逗号隔开。select name,age from students;

03.给某些字段 起别名:使用 "as"关键字 后跟别名即可 ("as" 可省略)select name as '姓名',age as '年龄' from students;

04.去重练习 DISTINCT 例如 去除students表中 年龄相同的, select DISTINCT(age) from students;

05.条件查询练习 :where条件,比较运算符=,逻辑运算符and

-- 条件查询 :where条件,比较运算符=,逻辑原算符and -- 查询性别为女,且属于1班的同学 显示这些同学姓名。 select * from students; select name,sex,class from students where sex ='女' and class = '1班';

06.模糊查询

-- 模糊查询 like (%字符 ) -- 语句格式: where 字段 like '%信息' -- 注意; '%信息'表示以 信息结尾的内容。'信息%'表示以 %前的内容 '%信息%' 表示包含信息的内容 -- 扩展 -- 查询全部学员身份证号码中包含 '24'的同学 select * from students WHERE card like '#54'; select * from students WHERE name like '%乔%'; select * from students WHERE name like '百里%';

07.条件查询之范围查询

select * from students; -- 查询 所有年龄在18岁 到20岁之间的学员的名字 -- 范围查询 between 起始值 and 结束值 ,表示的是一个连续的范围 -- 注意:范围必须 从小到大写 select name ,age from students WHERE age between 18 and 20; -- 条件查询---范围查询:在一个不连续的范围内 in(条件1,条件2........) select name ,age from students WHERE 字段名 in(条件1,条件2........);

08.条件查询之空判断

注意:null 和" " 是不同的。判空语法格式: is null 判非空语法格式: is not null例如1:查询没有填写身份证的学员

软件测试数据编写规范(干货软件测试常用的数据库操作)(12)

例如2:查询填写身份证的学员

软件测试数据编写规范(干货软件测试常用的数据库操作)(13)

排序 排序查询 语法格式: ORDER BY 字段名 asc(升序) ,desc(降序)

ORDER BY 字段名 【默认情况下 升序】ORDER BY 字段名 asc【升序】ORDER BY 字段名 desc【降序】

--排序查询 语法格式: ORDER BY 字段名 asc(升序) ,desc(降序) select * from students; --查询所有学员信息,按年龄从小到大排序 ORDER BY 字段名 select name,age from students ORDER BY age; --查询所有学员信息,按年龄从大到小排序 select name,age from students ORDER BY age DESC ; --查询所有学员信息,按年龄从大到小排序 年龄相同时 根据班级从小到大排序 select name,age from students ORDER BY age DESC,class asc;

聚合函数使用聚合函数方便进行数据统计,聚合函数不能在where中使用常用的聚合函数count( *) :查询总记录数max( ):查询最大值min( ):查询最小值sum( ):求和avg( ):求平均值

select * from students; -- 聚合函数 -- 查询数据总数 select count(*) from students; -- 显示12条数据-- select count(card) from students;-- 显示11条数据 注意 统计数据时,推荐使用(*) -- 最大值(字段名) select max(age) from students; -- 最小值(字段名) select min(age) from students; --平均年龄(字段名) select avg(age) from students; -- 求和sum(字段名) select sum(age) from students where sex="男";

分组查询

-- 分组查询 ORDER BY 字段名 ,一般情况下结合聚合函数一起使用, --目的是对分组后的数据再进一步统计 select sex , count(*) from students GROUP BY sex;

注意:如果想在分组后再次进行条件筛选,可以使用 having 关键字where 是对from后面指定的表进行数据筛选,属于对原始数据筛选having 是对 group by 的结果进行再筛选

软件测试数据编写规范(干货软件测试常用的数据库操作)(14)

如图所示,统计出来女同学的数量

分页

1.获取部分行语法格式:select * from 表名 limit start, count表示从 start开始,获取count条 数据start索引从0开始(在计算机中 计算机计数从0开始,这个计数方法称为''索引'')起始索引:实际数据数据-1 =对应的索引值例如:查询前3行信息 select * from students limit 0, 3

软件测试数据编写规范(干货软件测试常用的数据库操作)(15)

2.分页查询已知:每页显示m条数据,求:显示第n页的数据select * from students limit (n-1)*m , m;

-- 假设当前数据中,每页显示3条数据,查看第二页时 套入公式 limit (n-1)*m , m SELECT*FROM students LIMIT 3,3;

软件测试数据编写规范(干货软件测试常用的数据库操作)(16)

SQL语句 多表查询

案例中 所使用的 表1

软件测试数据编写规范(干货软件测试常用的数据库操作)(17)

案例中 所使用的 表2

软件测试数据编写规范(干货软件测试常用的数据库操作)(18)

1.内连接 表1 INNER join 表2 on 表1.字段 = 表2.字段

需求1:查询所有存在的商品分类的 商品信息 -- 内连接 练习:查询所有存在的商品分类的商品信息 -- 只显示两张表存在对应关系的数据, -- 表1 INNER join 表2 on 表1.字段 = 表2.字段 SELECT*from good inner join category on good.typeid = category.typeid;

软件测试数据编写规范(干货软件测试常用的数据库操作)(19)

2.左连接

左连接 以 "left join "关键字为界,显示左边所有信息,右边满足条件的则显示,不满足条件的用null表示出来即可 【前后2表可以更换--显示效果不同】方法1:

-- 需求2 查询所有商品信息,包含商品分类 -- 左连接 以 "left join "关键字为界,显示左边所有信息,右边满足条件的则显示,不满足条件的用null表示出来即可 select * from good left join category on good.typeid = category.typeid;

软件测试数据编写规范(干货软件测试常用的数据库操作)(20)

方法2:

需求3 查询所有商品分类,及其对应的商品信息 select * from category left join good on good.typeid = category.typeid;

软件测试数据编写规范(干货软件测试常用的数据库操作)(21)

3.右连接

主要解决3张及3张以上的表进行连接查询时比较常见。右连接 以right join 关键字为界,关键字右侧的表格 全部显示出来,而关键字左则对表有对应部分的显示,没有对应的部分 显示 为null

查询所有商品分类,及其对应的商品信息 select * from good right join category on good.typeid = category.typeid;

软件测试数据编写规范(干货软件测试常用的数据库操作)(22)

内连接,左连接,右脸姐 本质上 只是将分布于多张表的数据,通过连接的方式进行整理,形成"数据源" 连接完成后 ,之前的查询语法可以继续使用。

需求 显示所有价格大于80的商品信息,包含其具体分类 select * from good g left join category c on g.typeid=c.typeid where g.price >80;

软件测试数据编写规范(干货软件测试常用的数据库操作)(23)

4.自关联

自关联特点:1,只有一张表 2,表中至少存在2列字段具备对应关系通过"起别名"的方式 克隆出 表2 实现表关联即可.1.原表:

软件测试数据编写规范(干货软件测试常用的数据库操作)(24)

2.表中2列字段具备对应的关系 aid 和pid

软件测试数据编写规范(干货软件测试常用的数据库操作)(25)

-- 需求:查询河南省所有的市 SELECT *from areas; select * from areas a1 inner join areas a2 on a1.aid=a2.pid where a1.atitle='河南省' ;

3.查询结果如下:

软件测试数据编写规范(干货软件测试常用的数据库操作)(26)

5.子查询

定义:在一条查询语句当中,利用另一条语句作为条件或数据源,这条被充当条件或数据源语句称为子查询语句。1.在"where"后面 充当条件 。select goodName from good WHERE price > (select AVG(price) from good);

子查询练习:查询价格高于平均价格的商品信息 SELECT*from good ; 注释 -- select AVG(price) from good;-- 平均价格=69元 select goodName from good WHERE price > (select AVG(price) from good);

2.充当数据源 在from 和连接查询关键字后边的子查询语句充当数据源。

需求:查询所有来自拼夕夕的商品信息,包含商品分类 SELECT*from good where company = "并夕夕"; SELECT*from category; SELECT * from category c inner join (SELECT*from good where company = "并夕夕") a on c.typeid = a.typeid;

3.子查询是多个数据,在where子句中需要使用 in (子查询)select 字段名 from 表名 where 字段名 in (子查询);

-- 需求:查询在25--100之间的商品的价格 select price from good WHERE price between 25 and 100 ; select price from good WHERE price in ( select price from good WHERE price between 25 and 100);

拓展 :MYSQL的高级功能应用

E-R模型 :数据表之间对应的字段定义:E代表数据表,R代表联系

软件测试数据编写规范(干货软件测试常用的数据库操作)(27)

常见关系分类1.一对一2.一对多3.多对多

Linux中操作MySQL

前提:Linux系统中已经安装MySQL

已安装情况如下:

软件测试数据编写规范(干货软件测试常用的数据库操作)(28)

图中未设置登录密码

登录MySQL

MySQL -u数据库用户名 -p数据库密码 例如:MySQL - uroot -p123456

查看所有数据库 :show databases;

show databases;

如图所示:左边数据库 和命令行中显示的一样.

软件测试数据编写规范(干货软件测试常用的数据库操作)(29)

use 目标数据库 即 你想进入哪个数据库中:use mysql

mysql> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql>

查询当前使用的数据库名称 :select database();

mysql> select database(); ------------ | database() | ------------ | mysql | ------------ 1 row in set (0.00 sec) mysql>

创建数据库 :create database 数据库名 charset=utf8;

mysql> create database mike charset=utf8; Query OK, 1 row affected (0.00 sec) mysql>

删除数据库:drop database 数据库名;

mysql> drop database mike; Query OK, 0 rows affected (0.00 sec) mysql> show databases; -------------------- | Database | -------------------- | information_schema | | mysql | | performance_schema | | sys | -------------------- 4 rows in set (0.00 sec) mysql>

Linux 中Mysql出现 ">"如何退出?

ctrl C //按ctrl C 可以退出

显示数据库的数据表: show tables;

mysql> use mysql Database changed mysql> show tables; --------------------------- | Tables_in_mysql | --------------------------- | columns_priv | | db | | engine_cost | | event | ...............

查询表字段信息: desc 表名;

mysql> desc good; ---------- ------------------ ------ ----- --------- ---------------- | Field | Type | Null | Key | Default | Extra | ---------- ------------------ ------ ----- --------- ---------------- | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | goodName | varchar(10) | YES | | NULL | | | price | int(11) | YES | | NULL | | | count | int(11) | YES | | NULL | | | company | varchar(20) | YES | | NULL | | | remark | varchar(20) | YES | | NULL | | ---------- ------------------ ------ ----- --------- ---------------- 6 rows in set (0.01 sec)

查询创表语句 :show create table 表名;

mysql> show create table good; ------- -------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | Table | Create Table | ------- -------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | good | CREATE TABLE `good` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `goodName` varchar(10) DEFAULT NULL, `price` int(11) DEFAULT NULL, `count` int(11) DEFAULT NULL, `company` varchar(20) DEFAULT NULL, `remark` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 | ------- -------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 1 row in set (0.00 sec)

MySQL 日志的获取

注意:MySQL自带日志功能,但是开启日志功能,比较容易消耗数据库性能。

查看日志功能是否开启 show VARIABLES LIKE 'general%'; 开启操作 set global general_log = 1; 关闭操作 set global general_log = 0;

general_log off 日志显示关闭状态 如下图

软件测试数据编写规范(干货软件测试常用的数据库操作)(30)

查看日志功能是否开启

软件测试数据编写规范(干货软件测试常用的数据库操作)(31)

开启日志功能后,复制日志文件路径如下图所示

软件测试数据编写规范(干货软件测试常用的数据库操作)(32)

mysql> quit Bye [root@localhost ~]# cat /var/lib/mysql/localhost.log // 通过cat命令查看数据库日志信息即可

最后记得查看完日志后,立即关闭日志

set global general_log = 0;

软件测试数据编写规范(干货软件测试常用的数据库操作)(33)

general_log OFF // 关闭成功

MySQL 视图介绍及基本使用

作用:封装SQL语句,以类似"表"的形式存在。

基本语法:创建视图 create view 视图名称 as select 语句; 视图用法:当成查询使用即可

视图用法:当成查询使用即可。视图可以起到隐藏真实数据表内容的作用!

软件测试数据编写规范(干货软件测试常用的数据库操作)(34)

软件测试数据编写规范(干货软件测试常用的数据库操作)(35)

,