前言一.数据库是什么?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 防止乱码 排序规则 默认如下图所示即可)
3.数据表操作数据库右键--创建表---输入字段 --保存时输入报名
4.数据操作
七.数据库的备份与还原(Navicat)平时测试时 测试前先备份数据 ,测试完之后还原数据 测试过程中会产生垃圾数据,测试结束时一般都需要还原原有数据,因此需要在测试结束时执行还原
备份操作
Finshed successfully 备份成功---点击 "关闭"即可
还原操作1.新建一个与备份数据设置相同的数据库2.运行上一步保存sql 文件即可
点击 开始即可
八.数据类型与约束常用数据类型整数 int小数 字符串 varchar日期时间约束主 键 :primary key非空:not null唯一 :unique默认值 :default外键:foreign key九.SQL 语言运行有两种方式,选中当前语句运行或直接全部运行
保存查询语句后,可以通过"查询窗口"来打开刚编辑的语句
多行注释 1,选中要注释的语句,2,使用快捷键 CTRL / 即可 3.取消注释 CTRL / 即可
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,"雷神", "雷神来了");
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;
-- 注意:执行删除数据时,务必给出限定条件,否则会删除所有数据
查询数据 之基本查询:
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 查询所有数据
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:查询没有填写身份证的学员
例如2:查询填写身份证的学员
排序 排序查询 语法格式: 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;
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 的结果进行再筛选
如图所示,统计出来女同学的数量
分页1.获取部分行语法格式:select * from 表名 limit start, count表示从 start开始,获取count条 数据start索引从0开始(在计算机中 计算机计数从0开始,这个计数方法称为''索引'')起始索引:实际数据数据-1 =对应的索引值例如:查询前3行信息 select * from students limit 0, 3
2.分页查询已知:每页显示m条数据,求:显示第n页的数据select * from students limit (n-1)*m , m;
-- 假设当前数据中,每页显示3条数据,查看第二页时 套入公式 limit (n-1)*m , m
SELECT*FROM students LIMIT 3,3;
SQL语句 多表查询
案例中 所使用的 表1
案例中 所使用的 表2
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;
2.左连接
左连接 以 "left join "关键字为界,显示左边所有信息,右边满足条件的则显示,不满足条件的用null表示出来即可 【前后2表可以更换--显示效果不同】方法1:
-- 需求2 查询所有商品信息,包含商品分类
-- 左连接 以 "left join "关键字为界,显示左边所有信息,右边满足条件的则显示,不满足条件的用null表示出来即可
select * from good left join category on good.typeid = category.typeid;
方法2:
需求3 查询所有商品分类,及其对应的商品信息
select * from category left join good on good.typeid = category.typeid;
3.右连接
主要解决3张及3张以上的表进行连接查询时比较常见。右连接 以right join 关键字为界,关键字右侧的表格 全部显示出来,而关键字左则对表有对应部分的显示,没有对应的部分 显示 为null
查询所有商品分类,及其对应的商品信息
select * from good right join category on good.typeid = category.typeid;
内连接,左连接,右脸姐 本质上 只是将分布于多张表的数据,通过连接的方式进行整理,形成"数据源" 连接完成后 ,之前的查询语法可以继续使用。
需求 显示所有价格大于80的商品信息,包含其具体分类
select * from good g left join category c on g.typeid=c.typeid where g.price >80;
4.自关联
自关联特点:1,只有一张表 2,表中至少存在2列字段具备对应关系通过"起别名"的方式 克隆出 表2 实现表关联即可.1.原表:
2.表中2列字段具备对应的关系 aid 和pid
-- 需求:查询河南省所有的市
SELECT *from areas;
select * from areas a1 inner join areas a2 on a1.aid=a2.pid
where a1.atitle='河南省' ;
3.查询结果如下:
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);
E-R模型 :数据表之间对应的字段定义:E代表数据表,R代表联系
常见关系分类1.一对一2.一对多3.多对多
Linux中操作MySQL前提:Linux系统中已经安装MySQL
已安装情况如下:
图中未设置登录密码
登录MySQL
MySQL -u数据库用户名 -p数据库密码
例如:MySQL - uroot -p123456
查看所有数据库 :show databases;
show databases;
如图所示:左边数据库 和命令行中显示的一样.
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自带日志功能,但是开启日志功能,比较容易消耗数据库性能。
查看日志功能是否开启
show VARIABLES LIKE 'general%';
开启操作
set global general_log = 1;
关闭操作
set global general_log = 0;
general_log off 日志显示关闭状态 如下图
查看日志功能是否开启
开启日志功能后,复制日志文件路径如下图所示
mysql> quit
Bye
[root@localhost ~]# cat /var/lib/mysql/localhost.log
// 通过cat命令查看数据库日志信息即可
最后记得查看完日志后,立即关闭日志
set global general_log = 0;
general_log OFF // 关闭成功
作用:封装SQL语句,以类似"表"的形式存在。
基本语法:创建视图
create view 视图名称 as select 语句;
视图用法:当成查询使用即可
视图用法:当成查询使用即可。视图可以起到隐藏真实数据表内容的作用!
,