数据库-Mysql初级
一、应用场景
1、数据校验:在测试过程中,经常需要检查前台后台数据是否一致。
比如:就拿当时做过的一个注册功能,注册完成之后,我们需要检查数据是否有相关的记录
比如:要搜索某个商品,前端会展示所有相关商品的信息,但是我们需要检查商品的数量是否与数据库的数据是否一致。例外,还检查商品信息是否与数据库中的商品是否一致
再比如:删除前端一个数据,检查后台数据库中的数据是否发生变化
比如,删除数据库中的一条记录,看前端页面是否实时更新。
2、在某种时候,为了达到某个测试目的,需要构造一些测试场景,数据不够,这需要我们在数据库中去数据的增,删,改等操作。
比如:搜索分页查看功能的测试场景
比如:删除数据库的某条记录,看前端是否会实时更新
比如:做性能测试的时候,需要模拟1000个用户同时并发进行登录操作。
二、搭建数据库
1、安装数据库服务器
C:\桌面\试听软件安装\xampp-win32-1.7.1-installer(数据库文件安装).rar
解压,点击直接安装即可
2、安装数据库连接工具—NavicatForMySql
C:\桌面\试听软件安装\NavicatforMySQL(mysql数据库连接工具).rar
解压,点击直接安装即可
三、连接数据库
1、Leader给你数据库的权限:
数据库服务器的IP地址:192.168.5.171
账号:root
密码:
端口:3306
四、数据库服务器,数据库,表,数据四者之间的关系
- 数据库服务器中会有很多的数据库,一般一个项目对应一个数据库,也可能对应多个数据库。
- 一个数据库中可能对应多张表
- 数据表中存放的都是一些数据,不同的表存放的数据是不一样的。
五、NavicatForMysql客户端工具使用
1、连接属性的修改
连接属性->高级
2、如何创建数据库?
3、如何创建表?
数据类型:
int: 整数类型
char:字符类型 char(20) 不管是否会占用20个字符空间,都会占用。
varchar:字符类型 varchar(20) 如果只占用了10个字符的空间,剩余10个字符空间会释放。
float:浮点数类型
主键:一旦把某列设定为主键了,那么这一列的数据不能重复。
六、SQL语句:
1、DDL —数据库操作
DDL:数据定义语句 Data Definition Language
- 创建数据库:
create database 数据库名称;
Query OK, 1 row affected
- 查看有多少数据库:
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cdcol |
| fanwe |
| mydb1 |
| mydb2 |
| mysql |
| phpmyadmin |
| test |
| user |
| webauth |
+--------------------+
10 rows in set
- 删除数据库:
drop database 数据库名称;
Query OK, 0 rows affected
-
选择数据库:
use 数库名称;
Database changed
- 查看某个数据库中有多少表:
show tables;
+-----------------+
| Tables_in_mydb1 |
+-----------------+
| students |
+-----------------+
2、DDL—表的操作
- 创建一个表
create table 表名(字段1 属性,字段2 属性,字段3 属性.......);
例如:
create table stu(id int(4) not null primary key,
name char(20),
age int(4),
sex varchar(10),
class int(4),
address varchar(50),
chinese float(5,2),
english float(5,2),
math float(5,2));
Query OK, 0 rows affected
- 删除一个表库
drop table 表名;
Query OK, 0 rows affected
-
查看表的结构
desc 表名;
例如:
desc stu;
域/列名/字段名 类型 是否允许空 主键 额外数据
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(4) | NO | PRI | NULL | |
| name | char(20) | YES | | NULL | |
| age | int(4) | YES | | NULL | |
| sex | varchar(10) | YES | | NULL | |
| class | int(4) | YES | | NULL | |
| address | varchar(50) | YES | | NULL | |
| chinese | float(5,2) | YES | | NULL | |
| english | float(5,2) | YES | | NULL | |
| math | float(5,2) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
9 rows in set
3、DDL—修改表结构—增,删,查,改
- 增加一个字段
alter table 表名 add 字段名 字段属性;
例如:
alter table stu2 add age int(4);
- 删除一个字段
alter table 表名 drop 字段名;
例如:
alter table stu2 drop age;
- 修改一个字段
alter table change 老字段名 新字段名 字段属性;
例如:
alter table stu2 change id id int(4) primary key;
alter table stu2 change id id int(4) auto_increment;
- 把某个字段设定为主键
alter table stu2 add primary key(id);
- 删除一个主键
alter table stu2 drop primary key;
4、DML—对表数据操作-增,删,查,改
- 增
insert into 表名 values(值1,值2.....);
例如:
insert into students values(1,'张三',20,'男',1949,'广东深圳',99.8,80.5,77);
insert into 表名(name,sex,class,address,chinese,math) values('王麻子','女',1948,'湖南永州',99,88);
例如:
insert into students(name,sex,class,address,chinese,math) values('王麻子','女',1948,'湖南永州',99,88);
- 删
delete from 表名 where 条件
- 改
update 表名 set 字段=值 where 条件;
- 查
select * from 表名 where 条件;
例如:
select * from students; # 查询表中的所有学生的所有信息
- 查询练习
表:
create table stu(id int(4) not null primary key,
name char(20),
age int(4),
sex varchar(10),
class int(4),
address varchar(50),
chinese float(5,2),
english float(5,2),
math float(5,2));数据:
insert into students values (4, '李帅', '22', '男', '江西', '1703', '89', '90', '81');
INSERT INTO students VALUES (5, '杨话梅', '29', '女', '湖南长沙', '1704', '98', '19', '88');
INSERT INTO students VALUES (6, '乐细洋', '23', '女', '广东深圳', '1702', '80', '87', '93');
INSERT INTO students VALUES (7, '李立', '27', '男', '广东广州', '1701', '82', '88', '92');
INSERT INTO students VALUES (8, '吴亮', '28', '男', '湖南益阳', '1713', '89', '67', '99');
INSERT INTO students VALUES (9, '王老五', '27', '男', '山西', '1714', '88', '57', '97');
INSERT INTO students VALUES (10, '王麻子', '25', '男', '新疆', '1715', '40', '38', '92');
INSERT INTO students VALUES (11, '隔壁老王', '24', '男', '北京', '1708', '33', '89', '93');
INSERT INTO students VALUES (12, '宁丽君', '23', '女', '黑龙江', '1706', '89', '92', '83');
INSERT INTO students VALUES (13, '刘钊伟', '23', '男', '湖北', '1717', '76', '94', '77');
INSERT INTO students VALUES (14, '张盼盼', '22', '女', '上西', '1703', '75', '99', '63');
INSERT INTO students VALUES (15, '周红亮', '21', '女', '贵阳', '1704', '78', '84', '62');
INSERT INTO students VALUES (16, '赵六', '22', '男', '湖南永州', '1718', '87', '77', '65');
INSERT INTO students VALUES (17, '张三', '21', '男', '广东深圳', '1720', '92', '76', '86');
INSERT INTO students VALUES (18, '田七', '23', '女', '广东东莞', '1722', '91', '96', '85');
4、查找英语或语文成绩大于90的学生信息
5、查找id小于12的学生的名字、数学成绩、总分
6、查找三门课程都不及格的学生信息
7、查找学生总分大于250的学生信息
8、查找学生的平均分<80的学生信息
9、查找学生年龄在22-25岁之间的学生信息 [22,25]
10、查找姓王的学生信息
11、查找广东省学生信息
12、查找1701和1702的学生信息
13、显示学生信息的前面3~5行 2,3
14、显示数学成绩大于85分其中的5~8行 #200行
15、查询1704班的成绩信息
16、id为12、10、2修改他们的class=1713
17、查询1713班,语文成绩大于10小于60的成绩信息
18、查询学生表中5到10行的数据
19、查询1701班与1703班,英语成绩小于90的学生信息
20、查询出1713班成绩并且按数学成绩排序
21、查看班级对应的人数
22.总共有多少个班
23、查看英语最高分
23、计算语文成绩平均分
24、查看英语最高分的学生信息 【难】
25. 求出学生语文成绩的平均分
26. 展示每个学生的姓名及总分成绩
27. 展示英语为最高分的学生信息
28. 获取数学成绩最低的学生姓名及分数
29. 找出总分最低的学生信息
30. 统计出student表中男生/女生的人数
31. 统计出student表有几个年龄层;
32. 找出student表中语文成绩>90分的人数在1人以上的班级
33. 查询平均分在前五名的男生的信息
34. 求出每个班数学成绩的平均分
35. 查询每个班中数学成绩最高分
36. 找出班级中女生人数超过1人的班级编号及班级人数
- 总结:
条件后面可以使用数据运算符
+
-
>
<
>=
<=
!=
=
*
/ # 除,求商
% # 求余
and # 并且
or # 或者
between x and y #[x,y]
字段 like ‘王%’ #模糊查询
in (1701,1702); #在什么里面,相当于or
limit 2,3; #从第3行开始,总共3行 注意不需要跟where
order by 字段; #升序 注意不需要跟where
order by 字段 desc; #降序排列
order by age(字段1) asc,(chinese+english+math)(字段2) desc;
group by class; #分组 注意不需要跟where
函数:
max(字段)
min(字段)
avg(字段)
count(字段)
distinct 字段 #针对某个字段进行去重处理。
having #在通过函数计算出来的字段用作条件的时候,不能使用where只用having
having count(sex)>1;
- 删除练习:沿用前面的students表
1.请删除没有家庭住址的学生信息
2.查名字为张三,年龄最小的。
3.删除年龄为22的学生
4.求出语文成绩最小的值为多少
5.删除语文成绩最差的学生
6.删除湖南的男生
7.删除姓小的学生
8.删除广东深圳的男生
9.删除id为偶数的学生
10.删除语文成绩小于80分的
11.删除女性年龄大于23
12.删除总成绩小于150分的学生
13.展示学生信息,学生的班级升序排序,数学成绩降序排序
14.展示出所有班级号,班级号不重复
- 课堂作业:
CREATE TABLE `avengers` (
`eno` int(11) NOT NULL PRIMARY KEY ,
`name` varchar(255) DEFAULT NULL,
`sex` varchar(255) DEFAULT NULL,
`sal` decimal(10,0) DEFAULT NULL,
`comm` decimal(10,0) DEFAULT NULL,
)
插入数据:
INSERT INTO `avengers` VALUES ('1001', '美国队长', 'male', '12000', '2000');
INSERT INTO `avengers` VALUES ('1002', '灭霸', 'male', '18000', '4000');
INSERT INTO `avengers` VALUES ('1003', '黑豹', 'male', '9000', '2000');
INSERT INTO `avengers` VALUES ('1004', '钢铁侠', 'male', '15000', '1000');
INSERT INTO `avengers` VALUES ('1005', '绿巨人', 'male', '8000', '1000');
INSERT INTO `avengers` VALUES ('1006', '黑寡妇', 'female', '12000', '3000');
INSERT INTO `avengers` VALUES ('1007', '幻灭', 'male', '7000', '0');
INSERT INTO `avengers` VALUES ('1008', '蚁人', 'male', '8000', '500');
INSERT INTO `avengers` VALUES ('1009', '雷神', 'male', '14000', '3000');
INSERT INTO `avengers` VALUES ('1010', '绯红女巫', 'female', '9000', '800');
INSERT INTO `avengers` VALUES ('1011', '卡魔拉', 'female', '13000', '1000');
INSERT INTO `avengers` VALUES ('1012', '星爵', 'male', '8000', '0');
INSERT INTO `avengers` VALUES ('1013', '奇异博士', 'male', '12000', '3000');
INSERT INTO `avengers` VALUES ('1014', '鹰眼', 'male', '10000', '1500');
INSERT INTO `avengers` VALUES ('1015', '黄蜂女', 'female', '10000', '0');
INSERT INTO `avengers` VALUES ('1016', '蜘蛛侠', 'male', '12000', '900');
INSERT INTO `avengers` VALUES ('1017', '星云', 'female', '9000', '700');
题目:
1.找出名为蜘蛛侠的信息
2.找出有奖金的员工的信息
3.找出基本工资大于等于10k的员工的信息
4.展示基本工资大于12k且奖金大于1k的员工的信息
5.展示员工的总工资(包含基本工资和奖金)
6.找出总工资等于22k的员工,展示他的姓名\基本工资\奖金
7.修改没有奖金或者工资低于10k的员工的奖金为100
8.展示除灭霸以外的其他员工的所有信息
9.计算出员工的日薪(包含奖金)
10.删除工资为9000,奖金为700的员工的信息
11.删除名为'灭霸'的员工信息
12.修改卡魔拉的奖金为5000
- 家庭作业
CREATE TABLE `emp` (
`EMPNO` int(11) NOT NULL PRIMARY KEY,
`ENAME` varchar(10) COLLATE latin1_german1_ci DEFAULT NULL,
`JOB` varchar(9) COLLATE latin1_german1_ci DEFAULT NULL,
`MGR` int(11) DEFAULT NULL,
`HIREDATE` date DEFAULT NULL,
`SAL` double DEFAULT NULL,
`COMM` double DEFAULT NULL,
`DEPTNO` int(11) DEFAULT NULL
);
插入数据:
INSERT INTO `emp` VALUES ('7369', 'SMITH', 'CLERK', '7902', '1980-12-17', '800', null, '20');
INSERT INTO `emp` VALUES ('7499', 'ALLEN', 'SALESMAN', '7698', '1981-02-20', '1600', '300', '30');
INSERT INTO `emp` VALUES ('7521', 'WARD', 'SALESMAN', '7698', '1981-02-22', '1250', '500', '30');
INSERT INTO `emp` VALUES ('7566', 'JONES', 'MANAGER', '7839', '1981-04-02', '2975', null, '20');
INSERT INTO `emp` VALUES ('7654', 'MARTIN', 'SALESMAN', '7698', '1981-09-28', '1250', '1400', '30');
INSERT INTO `emp` VALUES ('7698', 'BLAKE', 'MANAGER', '7839', '1981-05-01', '2850', null, '30');
INSERT INTO `emp` VALUES ('7782', 'CLARK', 'MANAGER', '7839', '1981-06-09', '2450', null, '10');
INSERT INTO `emp` VALUES ('7788', 'SCOTT', 'ANALYST', '7566', '1987-07-03', '3000', null, '20');
INSERT INTO `emp` VALUES ('7839', 'KING', 'PRESIDENT', null, '1981-11-17', '5000', null, '10');
INSERT INTO `emp` VALUES ('7844', 'TURNER', 'SALESMAN', '7698', '1981-09-08', '1500', '0', '30');
INSERT INTO `emp` VALUES ('7876', 'ADAMS', 'CLERK', '7788', '1987-07-13', '1100', null, '20');
INSERT INTO `emp` VALUES ('7900', 'JAMES', 'CLERK', '7698', '1981-12-03', '950', null, '30');
INSERT INTO `emp` VALUES ('7902', 'FORD', 'ANALYST', '7566', '1981-12-03', '3000', null, '20');
INSERT INTO `emp` VALUES ('7934', 'MILLER', 'CLERK', '7782', '1981-01-23', '1300', null, '10');
题目:
Like与not Like的用法
1.找出名字中有字母O的员工名称
2.找出名称以字母B开头的员工信息
3.找出名称包含字母M以及以S开头的员工名称
4.找出工作为clerk,名称中包含A的员工的姓名,工作
5.找出名称第一个字母后为L的员工的编号和姓名
6.获取工作不以S开头的工作信息
7.获取名称不包含N和E的员工信息
8.获取从事不以A开头,但以T结尾的工作的员工信息
9.获取名称为四个字符的员工的信息
in 与 not in 的用法
1.查询名字为'SMITH''BLAKE''KING'的员工信息
2.查询10部门员工的(经理)mgr的信息
3.查询出名字不为'SMITH''BLAKE''KING'的员工信息
between x and y 与 not between x and y的用法
1.查询基本工资在1000到1500之间的员工信息
2.查询基本工资在1500-3000之间并且没有奖金的员工
3.查询出基本工资不在1500-3000之前的员工基本工资信息
4.查找基本工资在1000到2000之间的员工姓名和基本工资
5.查找基本工资在2000到3000以外的员工信息
6.获取‘SMITH‘, ’WARD‘, ’BLAKE’这三个员工的信息
7.获取员工编号在7566到7839之间的员工信息
8.获取员工SMITH 和BLAKE之间的员工信息
9.获取部门10员工的经理的信息
group by用法
1.查询出所有的员工信息并按员工的基本工资降序排序
2.返回员工的信息并按工作降序,工资升序排列
3.查询出在表中前五行的员工信息
4.查询出基本工资属于最高的第3-6名的员工信息
5.查询学生来自哪几个地方
6.求出每月基本工资总成本
7.找出工资最低的员工,并展示员工信息
8.统计该公司女生人数
9.统计名字中包含'星'的员工人数
10.求出奖金最高和奖金最低的基本工资是多少
11.展示工资最高的五个员工的信息
Where-having练习题目:
1.求出每个部门的平均工资
2.找出平均工资大于2000的部门
3.找出每月基本工资成本大于10000的部门
4.找出人数大于4人的部门
5.计算20部门的每月基本工资总成本
6.展示每个岗位的员工人数
7.展示岗位人数超过3人的岗位名称
8.求从事clerk工作的员工的总工资成本(总工资=sal+comm)
9.找出没有奖金的员工的平均工资
七、综合练习
- 练习1:
创建一个表:score表
字段说明:
id 序列号
stu_id 学号
c_name 科目
grade 成绩创建一个表:student表
字段说明:
id 学号
name 名字
sex 性别
birth 出生年月
department 系别
address 家庭住址
---------------------建立表格-------------------------------
create table score(id int(4) not null primary key auto_increment, 序列号
stu_id int(4) not null, 学号
c_name varchar(10), 课程名称
grade float(4,2), 分数
foreign key(stu_id) references student1(id) 外键
);
create table student1(id int(4) not null primary key, 学号
name varchar(10), 名字
sex varchar(10), 性别
birth varchar(10), 生日
department varchar(10), 专业
address varchar(10) 家庭地址
);
------------------------添加数据----------------------------------
insert into score values(1,901, '计算机',98);
INSERT INTO score VALUES(2,901, '英语', 80);
INSERT INTO score VALUES(3,902, '计算机',65);
INSERT INTO score VALUES(4,902, '中文',88);
INSERT INTO score VALUES(5,903, '中文',95);
INSERT INTO score VALUES(6,904, '计算机',70);
INSERT INTO score VALUES(7,904, '英语',92);
INSERT INTO score VALUES(8,905, '英语',94);
INSERT INTO score VALUES(9,906, '计算机',90);
INSERT INTO score VALUES(10,906, '英语',85);
INSERT INTO score VALUES(11,907, '计算机',98);
insert into student1 values(901,'张老大', '男',1984,'计算机系', '北京市海淀区');
INSERT INTO student1 VALUES( 902,'张老二', '男',1987,'中文系', '北京市昌平区');
INSERT INTO student1 VALUES( 903,'张三', '女',1991,'中文系', '湖南省永州市');
INSERT INTO student1 VALUES( 904,'李四', '男',1993,'英语系', '辽宁省阜新市');
INSERT INTO student1 VALUES( 905,'王五', '女',1990,'英语系', '福建省厦门市');
INSERT INTO student1 VALUES( 906,'王六', '男',1989,'计算机系', '湖南省衡阳市');
INSERT INTO student1 VALUES( 907,'老七', '男',1991,'计算机系', '广东省深圳市');
INSERT INTO student1 VALUES( 908,'老八', '女',1990,'英语系', '山东省青岛市');
题目:
1.查询student表的第2条到4条记录
2.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息
3.从student表中查询计算机系和英语系的学生的信息
4.从student表中查询年龄24~26岁的学生信息
5.从student表中查询每个院系有多少人
6.从score表中查询每个科目的最高分。
7.计算每个学生的总成绩
8.计算每个考试科目的平均成绩
9.查询计算机成绩低于95的学生信息
10.查询同时参加计算机和英语考试的学生的信息
11.将计算机考试成绩按从高到低进行排序
12.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩
13.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩
14.查询每个科目的最高分的学生信息。