2020-11-04

数据库

一、为什么要进行数据库测试?
数据库测试关注的内容
1.界面数据是否被正确的存储
2.界面上没有输入数据,不可见数据(这些内容是什么,有什么作用;数据的来源是可变的,还是固定的;数据的正确性。)
3.还要关注数据库事务处理
(1.注册成功时,还要同时用户操作内容–日志;2.在保存用户信息的同时,还要保存一条用户操作信息3.例如:转账功能,转出账户减少金额,转入账户增加转账金额,银行要记录转账明细\收入明细)
与界面相关的功能
1.增(添加、注册、开户)
2.删(删除、删除商品、清空购物车)
3.改(修改信息、忘记密码、存款、取款、转账)
4.查(搜索、查询)

二、定义
1.什么是数据库?
按照数据结构进行组织,存储和管理数据的仓库
使用数据库可提高数据查询和管理的效率
2.数据库的组成
一个库由若干个二维表组成,二维表是由行和列组成的表
一张表由若干条记录组成,一行数据称为一条记录
一条记录由若干个字段组成,一列称为一个字段,每个字段都有名字,称为字段名
3.数据库的分类
MySQL
被甲骨文公司收购,是关系型数据库,可跨平台使用(Windows,Linux),是开源软件,端口号为:3306
Oracle
甲骨文公司,可跨平台使用(Windows,Linux),收费软件,端口号:1521
SqlServer
微软公司,只能在Windows平台使用,收费软件,端口号:1433

三、设计数据库
目的:看懂数据库设计文档(实际工作中不需要测试设计数据库)
例子:学生管理系统
S1确定界面:
一个界面存放一类数据,一类数据存放在一张表中
S2设计每个表中存放的内容
S3确定表之间的关系–E-R图
1.Entity-Relation
2.实体关系图:一张表存放一类数据,一个数据代表一个实体
每个表中存放的内容,称为实体的属性
3.确定表之间主外键的关系
主表:主键所在的表称为主表
从表:外键所在的表称为从表
4.建表的顺序
先建主表,再建从表
S4:一个实体对应一张表
确定表的约束
1.主键约束:primary key 既不能为空,也不能重复
2.外键约束:foreign key 可以重复,依赖于主键的值
3.非空约束:not null 不能为空
4.检查约束:check 取值有限制或固定的值
5.默认约束:default 默认填写系统的时间
6.唯一性约束: unique 不能有重复
S5:设计表的结构
数据类型
1.整数:int
2.浮点数:float(单数) double(双数)
3.字符串:char(固定长度)如果不写长度,最多存放一个字符
Varchar(可以设定)必须写长度,
超过设定的长度报错(data too long )
4.枚举类型:enum(enumerate)列出可用值
5.日期:年 year 年月日 date
年月日时分秒 datetime timestamp

四、具体操作
DOS窗口操作数据库(了解)
1.显示所有的数据库(show databases;)
2.新建一个数据库(create database 库名;)
3.选择数据库(use 库名;)
4.显示所有表名(show tables; )
5.新建一个表 create table 表名(字段名 字段类型 约束1,约束2,
字段名 字段类型,
…);
6.查看表结构(desc 表名;)
7.修改表结构(alter table表名;)
8.复制表结构(create table 新表名like 旧表名;)
9.删除表结构(drop database 表名;)
10.删库(drop database 库名;)
11.退出数据库(exit)

五、语句建表
语法:create table 表名 ( 字段1 字段类型 【约束1】,【约束2…】
字段1 字段类型 【约束】

字段n 字段类型 【约束】);

六、单表查询
语法
1.select:查询的内容
(全部字段内容)
字段名
字段1,字段2(字段之间用逗号分隔)
select:
字段名 as 别名 (as 通常省略不写)
distinct字段名(去掉查询结果中重复的结果
distinct 字段名1,字段名2 去掉两个字段组合有重复的记录)
聚合函数:1.统计函数 count(
)数一数查询结果有几行记录
2.求和函数 sum(字段名)把字段中的数据做加法运算
3.最大值函数 max(字段名)找出字段中最大值
4.最小值函数 min(字段名) 找出字段中的最小值
5.平均值函数 avg(字段名)计算出字段中数据的平均值
2.from 从哪里查(表名)
3.where 需要满足的条件是什么–条件表达式

1.精确查询:等于 = 不等于 != 或 < >
2.比较运算: 大于> 小于< 大于等于>= 小于等于<=
3.逻辑运算:连接多个查询条件,
and 罗列的条件多个成立
Or 只要有一个条件成立
不能根据需求中的‘和’,‘或’决定使用and还是or
要具体的分析,决定条件之间的逻辑关系
And的优先级高于or 如果想先运行or连接的条件,需要用小括号括起来
4.集合运算:在集合中用(in)
不在集合中(not null)
5.区间运算:between起始值and结束值,(表示闭区间)只能用
于数值的区间
6.非空运算:是空值 is null 不为空 is not null
7.模糊查询: like %匹配任意多个字符 _ 只匹配一个字符

5.group by 分组
后面跟字段名(把字段中值相同的记录分成一组)
Group by 字段1,字段2 (先按数据1进行分组,再对每个组按字段2进行分组)
6.having 需要对数据分组处理后才满足的查询条件
必须出现在group by 后面
后面跟聚合函数的条件表达式
7.order by 按指定的字段名进行排序
后面跟字段名
从小到大:升序 asc 默认不写
从小到大:降序 desc
8.limit 显示部分查询记录
M,N从m+1行开始向下显示n条记录,当m=0时,可省略不写
Limit 5表示 第一条到第五条 M+1=1–>m=0
常见的报错及解决方法

1064 语法错误
原因:1.关键字拼写错误
2.包含了中文字符或非法字符(用英文输入法 )
3.标点符号的缺失(缺少逗号,成对出现的符号少一半)
4.不支持的语法
解决:at line 8 在第8行出现错误
Use near“内容” 在*****附近

1050 表已经存在了

1005主外键关联错误
原因:1. 主表未创建,找不到主表
2.主表名称写错了,表名不一致
3.主键的字段名称写错

1054在表中找不到字段名称,检查表及字段名对不对

如何快速编写sql语句
1.根据需求先明确需要从哪个表中查询,把表名放在from 后面
2.依据需求列出所有的需要查询的内容,把列出的内容放在select 后面
3.找出需求中需要满足的查询条件,如果条件可以直接在表中筛选出满足的条件,把条件放在where 后面,如果条件需要对记录进行处理后才能满足,找到需要分组的字段,把字段名放在group by 后面,再把条件放在having后面
4.如果需要对查询的结果按某个字段的顺序显示,把字段放在order by 后面,注意添加排序的方式,降序desc 升序可默认不写
5.按单表查询的语句,调整关键字顺序
七、多表查询
1.什么是多表查询
查询的条件和查询的结果分别在多个不同的表中
查询的内容需要在一张表中进行多次查询
2.多表查询的方式

等值连接查询
原理:将多个表连接成一张逻辑大表,字段相加,(笛卡尔积),再从这张逻辑大表中按主外键相等的条件,筛选出有效的连接记录,再从有效的记录中查询需要的记录
语法:
两张表
Select *
From a,b
Where a.主键=b.外键 (或者a.外键=b.主键)
And 查询条件
三张表
Select *
From a,b,c
Where a.主键=c.外键 and b.主键=c.外键
And 查询条件/要求
优点:相对其他多表查询来说比较简单
缺点:查询效率低,要先生成笛卡尔积的大表,再逐一筛选符合主外键相等的记录
不适合海量数据的查询

内连接查询
原理:
连接后的记录与等值连接的结果相同,等值连接是先连接再判断,内连接是先判断再连接
语法:
两张表:
Select *
From A inner join B on A.主键=B.外键
Where 查询条件
三张表:
Select *
From A inner join B on A.主键=B.外键 inner join C on B.主键=C.外键
Where 查询条件
子查询/嵌套查询
原理:一条SQL语句的执行结果是另一条SQL语句的查询条件
多条SQL语句拼成一条完整的SQL语句
需要先执行的select语句用小括号括起来,称为字句
步骤:1.依据需求,拆分为多个单表查询的语句
2.依次写出每个单表查询的语句,写一句执行一句,确保每条语句的正确性,验证查询结果,一条记录,多条记录
3.合并SQL语句,子句的结果,1条记录用(=、!=、<、>、>=、<=)连接,多条记录用(in或not in)连接子句
优点:查询效率快
缺点:逻辑比较复杂,需要对表结构非常清晰

左外连接查询
左边表的全部记录+右边表中有关联的记录
Select * from A left join B on A.主键=B.外键

右外连接查询
右边表的全部记录+左边表中有关联的记录
Select * from B right join A on A.主键=B.外键

常见的报错总结

2003无法连接数据库服务器
1.服务器端口错误,查看数据库的配置文件,my.in,port=端口号
2.未启动数据库服务器,在运行的窗口下输入:services.msc,计算机右键–管理–服务;查看MySQL服务是否启动(否,右键,选择启动)(是,检查已启动的服务器是否正确)

1045密码错误
不需要密码,输入密码
输入密码不正确

1052连接查询时,同名字段未加相应的表名

1242 子查询时,子句返回的结果大于1行,但是没有用in连接子句

1235当前版本的MySQL不支持子句有limit
用in/all/any/some 的关键字连接子句

数据库的增,删,改
一、向表中添加记录
1.与测试的关系:
向表中新增测试数据
界面对应的功能:注册、新增、添加、开户…
功能特点:用户从界面输入数据,经过有效的校验,将数据添加到对应表中
2.语法:insert into 表名(字段1,字段2,…)
Values(字段1的值,字段2的值…)
注意事项:
1.字段名与字段值要相应
2.字段的个数与值的个数要相等
3.设置了非空约束的字段必须有值
4.字符串和日期类型的值要加引导,整型和浮点型不加单引号
5.向表中的全部字段都插入数据时,字段名可忽略不写,但值的顺序必须与表结构中字段的顺序完全一致
6.向自增列添加记录时,可以用null代替具体的数据,具体添加相应的数据
二、修改表中的数据
1.与测试的关系
修改表中的记录,验证功能的正确性
界面对应的功能:修改个人资料、忘记密码、取款、转账、存款…
功能特点:界面上有默认数据–验证数据的正确性
用户从界面输入一些修改的数据–添加的功能测试
2.语法: update 表名 set 字段名=修改后的值,字段2=修改后的值… where 修改条件
3.联级更新
当修改主表主键时,所有从表中对应的外键同时被修改
方法一:手工设置:在Tables中,选中从表–右键–design tables --foreign keys on update–选择cascade—点击保存
方法二:语句设置
在建从表的语句时,在外键关联主键之后添加级联更新 foreign key(外键名) references 主表(主键名) on update cascade
三、删除表中的数据
1.与测试的关系
界面对应的功能:删除<真删除>把记录从表中删除
<假删除>修改了记录的某个值,记录还在表中能查询
语法:
Delete from 表名 删除表中的全部记录,锁定表中的全部记录,逐行删除,可以进行数据回滚
类似的命令:truncate table 表名
先执行drop table
再执行create table
删除的速度快,但无法进行回滚
Delete from表名
Where 删除条件

级联删除:当删除主表记录时,所有从表中相关的记录同时被删除
方法一:手工设置,在tables 中,选中从表–右键–design table–foreign key–on delete --选择cascade --点击保存
方法二:语句设置:在建从表的语句时,在外键关联主键之后添加级联删除 foreign key (外键名) references 主表(主键名)on delete cascade

四、高级数据库对象
索引
1.什么是索引:数据库索引(index)是数据库表中一列或多列的值进行排序的一种结构
使用索引可以提高查询的速度,合理的索引,一张表的索引8个左右,经常作为查询条件的字段
2.优点:提高系统的性能,加快对表中记录的查找或排序
3.缺点:增加了数据的存储空间,创建和维护索引要耗费时间,这种时间随着索引数量增加而增加,插入或修改数据要花费较多的时间(索引也随之改动,降低了数据的维护速度)
4.查看表中的索引(show index from 表名;)
5.创建索引(create index 索引名 on 表名 (字段名1,字段2…))
6.删除索引 drop index 索引名 on 表名

存储过程
存储过程(procedure)是实现特定功能的一段代码的集合
语法:
Create procedure 存储过程名称(参数)输入参数in 输出参数out 输入输出inout
Begin
实现指定功能的代码
End
常见的报错及解决

1062 在插入或修改数据时,向主键字段或唯一性约束字段添加重复的数据

1364 向表中插入数据时,未给非空字段添加数据

1136 插入数据时,字段的个数与值的个数不匹配

1093 更新/删除记录时,目标表不能作为查询的表
方案一:将子句的结果与目标表进行连接
方案二:为子句增加一层嵌套
1451/1452 删除或更新主表主键时,不允许直接修改,为了保证数据的一致性和完整性,同时删除/修改从表中的数据
需要设置级联更新/级联删除

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值