数据库

为什么要进行数据库的测试

数据库是以数据结构来组织、存储、管理数据的仓库,使用数据库可以提高管理、查找的效率,所以数据一般都应该正确的存储在数据库中。而数据库中包含了很多字段,以注册功能为例,注册完成时我们需要登录来验证数据是否被存储到数据库中,我们还应该与开发进行沟通确认每个字段的含义,看看数据存储的位置是否正确,数据的内容是否与界面输入的一致,一些关键的信息是否进行了加密处理,数据库中界面上未填写的字段是从哪里来的,这些字段存储的数据以及数据格式是否正确等。

在测试过程中,虽然界面提示正确,但不能保证数据没有问题,所以一定要进行数据库测试。

表的约束

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)用户能以多种角度看待同一数据

游标(cursor)

触发器(tigger)

你可能感兴趣的:(数据库)