为什么要进行数据库的测试
数据库是以数据结构来组织、存储、管理数据的仓库,使用数据库可以提高管理、查找的效率,所以数据一般都应该正确的存储在数据库中。而数据库中包含了很多字段,以注册功能为例,注册完成时我们需要登录来验证数据是否被存储到数据库中,我们还应该与开发进行沟通确认每个字段的含义,看看数据存储的位置是否正确,数据的内容是否与界面输入的一致,一些关键的信息是否进行了加密处理,数据库中界面上未填写的字段是从哪里来的,这些字段存储的数据以及数据格式是否正确等。
在测试过程中,虽然界面提示正确,但不能保证数据没有问题,所以一定要进行数据库测试。
表的约束
1.主键约束:primary key
2.外键约束:foreign key
3.非空约束:not null
4.默认约束:default
5.唯一约束:unique
6.检查约束:check
注意:mysql不支持check约束,用枚举类型代替
常见的数据类型
1.整数:int
2.浮点数:float、double
3.字符串:char(n)、varchar(n) n表示一个正整数
4.枚举:enum
5.日期:年 year
年月日 date
年月日时分秒 datetime
timestamp
DOS窗口操作数据库
1.查看所有的数据库
show databases;
2.创建库
create database 数据库名;
3.使用数据库
use 数据库名;
4.查看所有的表
show tables;
5.创建表
create table 表名(
字段名称1 字段类型 约束1,约束2,
字段名称2 字段类型 [约束],
...
)
6.查看表结构
desc 表名;
7.修改表结构
(1)增加一列
alter table 表名 add 字段名 字段类型 [约束];
(2)修改字段类型
alter table 表名 modify 字段名 字段类型 [约束];
alter table 表名 change 原字段名 新字段名 新字段类型[约束];
(3)修改字段名称
alter table 表名 change 原字段名 新字段名 字段类型;
(4)表重命名
alter table 原表名 rename 新表名;
(5)删除字段
alter table 表名 drop 字段名;
8.复制表结构
create table 新表名 like 旧表名;
9.删除表结构
drop table 表名;
10.删除库
drop database 库名;
11退出
quit;
exit;
单表查询
select 查询的内容 from 表名 where 查询的条件 group by 字段名 having 分组后的条件 order by 字段名 asc(desc) limit m,n
多表查询
等值连接
1.原理:将多个表组合成一张逻辑大表
2.语法:
select * from A,B where A.主键=B.主键 and 查询条件
3.优点:相对简单
缺点:查询效率较低,因为会生成笛卡尔积的表
4.适用范围:不适合海量数据的查询
子查询/嵌套查询
1.原理:将多个查询语句拼接成一条完整的sql语句
2.优点:查询效率高
缺点:逻辑比较复杂,需对表结构有清晰的了解
3.适用范围:查询的结果在一张表中
内连接
语法:select * from A inner join B on A.主键=B.主键 where 查询的条件
左外连接
语法:select * from A left join B on A.主键=B.主键
查询结果:左边表的全部记录+右边表的有关记录
右外连接
语法:select * from A right join B on A.主键=B.主键
查询结果:右边表的全部记录+左边表的有关记录
增
insert into 表名(字段1,字段2,字段3,...) values(字段1的值,字段2的值,字段3的值,...)
注意:
1.字符串和日期类型的数据,要用引号引起来
2.非空字段在插入数据时必须有值
3.向表中全部字段插入数据时,字段名可以不写
4.字段的个数与值的个数要匹配
5.自增列可以用null代替其值
改
update 表名 set 字段名=修改后的值,字段2=修改后的值 where 修改条件
注意:
级联更新:当修改主表主键时,所有从表的外键也同时被修改
设置级联更新:
手动设置:选择从表---design table---foreign keys---on update---选择cascade
建表设置:在外键关联主键后面加上on update cascade
删
删除表中全部记录:
delete from 表名
truncate table 表名 (删除速度快,且无法进行数据库回滚)
删除指定记录:
delete from 表名 where 删除条件
注意:
级联删除:当删除主表主键时,所有从表中对应的记录同时被删除
设置级联删除:
手动设置:选择从表---design table --foreign keys---on delete---选择cascade
建表设置:在外键关联主键后面加上on delete cascade
外键关联主键
foreign key(外键名称) references 主表(主键名)
联合主键
primary key(字段1,字段2,...)
事务
1.什么是事务?
事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。
事务主要用于处理操作量大,复杂度高的数据。
2.事务的四大特性:
(1)原子性:一个事务的所有操作,要么全部执行完成,要么全部不执行。如果事务中的某个操作失败,那么其他操作也会被回滚到事务执行前的状态
(2)一致性:事务的执行使得数据库从一种正确状态转换成另一种正确状态
(3)隔离性:多个事务并发执行时,一个事务的执行不影响其他事务的执行
(4)持久性:事务正确提交后,其结果永远保存在数据库中
3.开启事务begin;
提交事务commit;
回滚rollback;
数据库高级对象
索引(index)
1.目的:提高系统的性能,加快对表中记录的查询和排序
2.定义:数据库索引时对数据库中一列或多列值进行排序的一种结构
3.查看索引:show index from 表名
4.创建索引:create index 索引名 on 表名(字段1,字段2)
5.删除索引:drop index 索引名 on 表名
存储过程(stored procedure)
1.存储过程:是一组为了完成特定功能SQL语句集
2.创建存储过程:
create procedure 存储过程([参数])
begin
实现特定功能的代码
end
参数类型:
in:输入参数
out:输出参数
inout:输入输出参数
3.调用:call 存储过程名称
4.例子:实现批量构造账号密码的存储过程
#创建一个存储过程
create procedure pro_insert1(in num int,in uname char(20))
begin
#定义一个变量i,存放id,用来控制循环次数
declare i int;
#设置i的值为1
set i=1;
while i<=num do
insert into test values(i,concat(uname,i),'123456');
set i=i+1;
end while;
end
#调用存储过程
call pro_insert1(3000,'bwf')
视图(view)
1.特点:从一张表或几张表中导出来的表,是一种虚拟表
2.创建视图:create view 视图名 as select * from 表;
3.作用:
(1)帮助用户屏蔽真实表结构变化带来的影响
(2)能简化用户的操作
(3)对机密数据提供安全保护
(4)用户能以多种角度看待同一数据