ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

测试基础知识——数据库

测试基础知识——数据库

一、数据库基础概念

  1. 数据库(database):是表的集合,一个数据库中能够有多个表;
  2. 表(table):由行列组成的二维表格(类似于excel);
  3. 行:记录(record);
  4. 列:字段(field)。

二、SQL语法

  1. 注释:单行注释:-- 注释内容;多行注释:/* 注释内容 */
  2. 语法忽略单词的大小写,语句用英文分号进行分隔
  3. 常用数据类型:
序号数据类型英文说明
1整数int
2小整数tinyint有符号范围(-128,127),无符号范围(0,255)
3小数decimaldecimal(5,2)存5位数,小数占2位
4字符串varcharvarchar(3)最多存3个字符,一个中文或一个字母都占一个字符,中文需要用英文单引号括起来
5日期时间datetime
  1. 写SQL基本方法:基本的select框架(包括连接表)=》where后面的条件=》select需要显示的字段

三、常用SQL操作语句表

序号操作关键词语法说明
1创建表createcreate table 表名 (字段名 字段类型 约束(选填),字段名 字段类型 约束(选填))1. 多个字段用英文逗号分隔
2删除表dropdrop table 表名drop table if exists 表名:如果表存在才删除,避免报错
3插入记录insert1. 插入一组记录:insert into 表名 values (值1,值2…)
2. 插入一组记录的部分值:insert into 表名 (字段名) values (值)
值的顺序和字段名的顺序需要一致
3. 一条语句插入多个记录:insert into 表名 values (值1,值2), (值3, 值4)
4查询记录select1. 查询表中所有内容:select * from 表名
2.条件查询指定字段:select 字段1,字段2 from 表名 where 条件
3. 查询记录并进行排序:select * from 表名 order by 字段1 asc, 字段2 desc…
4. 条件查询并排序:select * from 表名 where 条件 order by 字段及排序方式
1. *:表示所有内容
2. 通过as给字段起别名(as可以省略):select 字段1 as 别名1 from 表名
3.通过as给表起别名(as可以省略):select * from 表名2 as 别名2
4.过滤重复记录(distinct):示例select distinct * from 表名

5.where条件查询规则
5.1 如果没有where条件,就修改表中所有记录
5.2 相关运算符 :
不等于:!=或者<>
与:and
或:or
非:not
5.3.like模糊查询规则
%:任意个数的任意字符
_:一个任意字符
示例:select * from 表名 where name like ‘A%’
5.4.范围查询规则
in:在一个非连续的范围内,where size in (‘s’,‘m’,‘l’)
between…and…:在一个连续的范围内(范围包含两个边界值),where age between 20 and 25
5.5.空判断
注意:null:表示什么都没有;''表示长度为0的字符串
is null:为空,where name is null
is not null:不为空

6.order by排序规则
6.1 asc(默认值)从小到大排序,升序;
desc从大到小排序,降序。
6.2 order by能够多个字段排序,以字段顺序进行先后排序
5修改记录updateupdate 表名 set 字段1=值1,字段2=值2… where 条件可使用where补充修改条件
6删除记录deletedelete from 表名 where 条件可使用where补充删除条件
7删除记录truncatetruncate table 表名1. 删除表中所有数据,保留表结构
2. 不需要添加条件
3. 主键的自增长字段恢复从1开始(delete会从之前的值继续向后+1)
8数据分组group by1. select 字段, count(*) from 表名 group by 字段
2. select 聚合函数 from 表名 where 条件 group by 字段
3. 注意多种组合的先后顺序【先筛选后分组】:select 字段 from 表名where 条件 group by 字段 order by 字段
4. 【先分组后筛选】:select 字段 from 表名 group by 字段 having 字段
1. 以字段进行分组,便于配合聚合函数进行计算

2.having分组后的筛选规则
2.1 having总是出现在group by之后
2.2 having能够配合聚合函数使用

3. having与where筛选的区别:
3.1 where是对表的原始数据进行筛选,having是对group by后的分过组数据进行筛选
3.2 having后面能够使用聚合函数,但是where后面不能使用聚合函数
9数据分页显示limitselect * from 表名 limit start, count1. start表示开始行,省略时采用默认值0,从第一行开始
count表示显示行数
2. limit也能和where查询语句结合使用,且总放在最后
10子查询select嵌套select * from 表 where (select子查询)1. 子查询嵌套在主查询里面,一般用括号括起来
2. 子查询作为条件或者数据源来辅助主查询
3. 子查询是可以独立存在的一条完整select语句
4. 主查询不能独立运行,需要依赖子查询的结果

5. 特殊子查询定义:
标量子查询:子查询返回结果只有一行一列
列子查询:子查询返回结果为一列多行
表级子查询:子查询返回结果为多行多列(一个表)

四、字段的约束——校验记录

序号约束关键词说明
1主键primary key1. 此字段值不能重复,auto_increment表示值自动增长
2. 插入值时,如果不想插入主键自增长字段可用占位符:0或者null
2非空not null此字段不允许空值
3唯一unique此字段不允许重复
4默认值default1. 当不填写此值时会使用默认值
2. 示例:age int default 30

五、聚合函数——简单计算查询结果
注意聚合函数能用于select中的显示结果和having后的条件,不能在where后面的条件中套用

序号函数作用示例
1count()统计记录条数1. select count(字段或者*) from 表名
2. 去重处理:select count(distinct 字段) from 表名
2max()查询数值型字段中的最大值select max(字段) from 表名
3min()查询数值型字段中的最小值select min(字段) from 表名
4sum()求数值型字段数值之和select sum(字段) from 表名
5avg()求数值型字段平均值1. select avg(字段) from 表名
2. null值不计算在avg的分母中(仅计算有值数据的平均值)

六、多张表的连接方式

序号连接方式关键词查询结果示例说明
1内连接inner join…on…只显示两个表的交集1. 标准语法:select * from 表1 inner join 表2 on 表1.字段 = 表2.字段 where 条件 order by 排序

2. 多表内连接:select * from 表1 inner join 表2 on 表1.字段 = 表2.字段 inner join 表3 on 表1(也有可能是表2).字段 = 表3.字段

3. 隐式内连接(了解):select * from 表1,表2 where 表1.字段 = 表2.字段
1. 着重关注表中映射的字段
2. 通过控制select后面的内容来展示部分内容(多表中的同名字段需要补充上表名来进行区分:表1.字段)
2左连接left join…on…显示两个表的交集 + 左表特有的数据标准语法:select * from 表1 left join 表2 on 表1.字段 = 表2.字段 where 条件 order by 排序

右表中不存在的数据用null填充
3右连接right join…on…显示两个表的交集 + 右表特有的数据
标准语法:select * from 表1 right join 表2 on 表1.字段 = 表2.字段 where 条件 order by 排序

左表中不存在的数据用null填充
4自关联on 表的别名1.字段1 = 表的别名2.字段2//自关联定义:同一张表做连接查询,表中的某一字段关联了这个表中另外的一个字段,但是他们的业务逻辑含义不一样

七、MySQL常用内置函数
内置函数能够在where后面的条件和select的显示中进行套用

序号函数关键词示例说明
1拼接字符串concatconcat(字符1, 字符2, 字符3…)1. 对多个字符串进行拼接
2. 参数可以是数字也可以是汉字
2计算字符个数lengthlength(str)计算字符串长度,一个汉字长度为3
3截取字符串left/right/substringleft(str,截取长度)
right(str,截取长度)
substring(str,起始位置(从1开始),截取长度)
1. 从左边/右边/中间截取字符串
2. 英文和中文都视为1个字符
4去除字符串空格ltrim/rtrim/trimltrim(str)
rtrim(str)
trim(str)
去除字符串左侧/右侧/两侧的空格
5求四舍五入值roundround(数字, 需要保留的小数位数(默认是0)对数字进行四舍五入
6随机数randrand()
实现表的随机排序:order by rand()
生成一个0~1的随机数
7返回当前时间信息current_date/current_time/now返回当前日期:current_date()
返回系统当前时间:current_time()
返回系统当前日期+时间:now()
日期和时间通常在插入记录时调用

八、一些拓展知识

序号函数关键词/解释示例说明
1存储过程procedure1. 创建存储过程:
create procedure 存储过程名称(参数列表)
begin
sql 语句
end
2. 调用存储过程:call 存储过程(参数列表)
3. 删除存储过程:drop procedure if exists 存储过程
2视图view1. 创建视图:
create view 视图名称 as select 语句
2. 删除视图:drop view if exists 视图
1. 视图就是对查询进行封装,返回结果也是一张表
2. 能够对视图进行表的只读操作
3事务事务是多条更改数据操作的sql语句集合,这些操作要么都执行,要么都不执行开启事务:begin;
回滚事务:rollback;
提交事务:commit;
1. 数据的更改涉及到事务
2. 开启事务,执行update或delete语句,变更写到缓存中不会立即生效
3. 回滚事务,放弃修改
4. 提交事务:对表的修改生效
4索引index1. 创建索引:create index 索引名称 on 表名(字段)
2. 查看索引:show index from 表名
3. 删除索引:drop index 索引名称 on 表名
1. 创建索引时,如果指定的字段是字符串则还需要指定长度,一般长度与定义字段时的长度一致
2. 索引能够加快数据查询效率,where后面的字段,数据库会自动查找是否有索引
3. 系统会自动为主键创建索引

九、基于命令行的mysql

序号操作命令说明
1连接数据库并登录mysql -h mysql服务器地址 -u 用户名 -p-p:输入密码进入登录
2展示数据库/表名show databases/tables
3进入数据库use 数据库名
4告诉mysql客户端编码方式set names gbk避免数据库查询结果返回乱码
5查看表的结构desc 表名
6创建数据库create database 数据库名 default charset 字符集字符集:默认为utf8

十、参考学习资料
软件测试工程师所需的MySQL数据库技术,mysql系统精讲+课后练习

B站学习连接:https://www.bilibili.com/video/BV1M541147Cn/?spm_id_from=333.788.videopod.episodes&vd_source=7089343738fb1b5a72c1db4d1f9c49ea

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进