数据库-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
image.png
四、数据库服务器,数据库,表,数据四者之间的关系
数据库服务器中会有很多的数据库,一般一个项目对应一个数据库,也可能对应多个数据库。
一个数据库中可能对应多张表
数据表中存放的都是一些数据,不同的表存放的数据是不一样的。
五、NavicatForMysql客户端工具使用
1、连接属性的修改
连接属性->高级
image.png
2、如何创建数据库?
image.png
3、如何创建表?
image.png
image.png
image.png
数据类型:
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|+--------------------+10rowsinset
删除数据库:
drop database 数据库名称;Query OK,0rows affected
选择数据库:
use数库名称;Database changed
查看某个数据库中有多少表:
show tables;+-----------------+|Tables_in_mydb1|+-----------------+|students|+-----------------+
2、DDL—表的操作
创建一个表
create table 表名(字段1属性,字段2属性,字段3属性.......);例如:create tablestu(idint(4)not null primary key,namechar(20),ageint(4),sexvarchar(10),classint(4),addressvarchar(50),chinesefloat(5,2),englishfloat(5,2),mathfloat(5,2));Query OK,0rows affected
删除一个表库
drop table 表名;Query OK,0rows 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||+---------+-------------+------+-----+---------+-------+9rowsinset
3、DDL—修改表结构—增,删,查,改
增加一个字段
alter table 表名add字段名 字段属性;例如:alter table stu2addageint(4);
删除一个字段
alter table 表名 drop 字段名;例如:alter table stu2 drop age;
修改一个字段
alter table change 老字段名 新字段名 字段属性;例如:alter table stu2 change id idint(4)primary key;alter table stu2 change id idint(4)auto_increment;
把某个字段设定为主键
alter table stu2addprimarykey(id);
删除一个主键
alter table stu2 drop primary key;
4、DML—对表数据操作-增,删,查,改
增
insertinto表名values(值1,值2.....);例如:insertintostudentsvalues(1,'张三',20,'男',1949,'广东深圳',99.8,80.5,77);
insert into 表名(name,sex,class,address,chinese,math)values('王麻子','女',1948,'湖南永州',99,88);例如:insert intostudents(name,sex,class,address,chinese,math)values('王麻子','女',1948,'湖南永州',99,88);
删
deletefrom表名where条件
改
update 表名 set 字段=值 where 条件;
查
select*from表名where条件;例如:select*fromstudents;# 查询表中的所有学生的所有信息
查询练习
表:
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,314、显示数学成绩大于85分其中的5~8行 #200行15、查询1704班的成绩信息16、id为12、10、2修改他们的class=171317、查询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);#在什么里面,相当于orlimit2,3;#从第3行开始,总共3行 注意不需要跟whereorder by 字段;#升序 注意不需要跟whereorder by 字段 desc;#降序排列order byage(字段1)asc,(chinese+english+math)(字段2)desc;groupbyclass;#分组 注意不需要跟where函数:max(字段)min(字段)avg(字段)count(字段)distinct 字段 #针对某个字段进行去重处理。having #在通过函数计算出来的字段用作条件的时候,不能使用where只用havinghavingcount(sex)>1;
删除练习:沿用前面的students表
1.请删除没有家庭住址的学生信息2.查名字为张三,年龄最小的。3.删除年龄为22的学生4.求出语文成绩最小的值为多少5.删除语文成绩最差的学生6.删除湖南的男生7.删除姓小的学生8.删除广东深圳的男生9.删除id为偶数的学生10.删除语文成绩小于80分的11.删除女性年龄大于2312.删除总成绩小于150分的学生13.展示学生信息,学生的班级升序排序,数学成绩降序排序14.展示出所有班级号,班级号不重复
课堂作业:
CREATETABLE`avengers`(`eno`int(11)NOTNULLPRIMARYKEY,`name`varchar(255)DEFAULTNULL,`sex`varchar(255)DEFAULTNULL,`sal`decimal(10,0)DEFAULTNULL,`comm`decimal(10,0)DEFAULTNULL,)
插入数据: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的员工的奖金为1008.展示除灭霸以外的其他员工的所有信息9.计算出员工的日薪(包含奖金)10.删除工资为9000,奖金为700的员工的信息11.删除名为'灭霸'的员工信息12.修改卡魔拉的奖金为5000
家庭作业
CREATETABLE`emp`(`EMPNO`int(11)NOTNULLPRIMARYKEY,`ENAME`varchar(10)COLLATElatin1_german1_ciDEFAULTNULL,`JOB`varchar(9)COLLATElatin1_german1_ciDEFAULTNULL,`MGR`int(11)DEFAULTNULL,`HIREDATE` dateDEFAULTNULL,`SAL` doubleDEFAULTNULL,`COMM` doubleDEFAULTNULL,`DEPTNO`int(11)DEFAULTNULL);
插入数据:INSERTINTO`emp`VALUES('7369','SMITH','CLERK','7902','1980-12-17','800',null,'20');INSERTINTO`emp`VALUES('7499','ALLEN','SALESMAN','7698','1981-02-20','1600','300','30');INSERTINTO`emp`VALUES('7521','WARD','SALESMAN','7698','1981-02-22','1250','500','30');INSERTINTO`emp`VALUES('7566','JONES','MANAGER','7839','1981-04-02','2975',null,'20');INSERTINTO`emp`VALUES('7654','MARTIN','SALESMAN','7698','1981-09-28','1250','1400','30');INSERTINTO`emp`VALUES('7698','BLAKE','MANAGER','7839','1981-05-01','2850',null,'30');INSERTINTO`emp`VALUES('7782','CLARK','MANAGER','7839','1981-06-09','2450',null,'10');INSERTINTO`emp`VALUES('7788','SCOTT','ANALYST','7566','1987-07-03','3000',null,'20');INSERTINTO`emp`VALUES('7839','KING','PRESIDENT',null,'1981-11-17','5000',null,'10');INSERTINTO`emp`VALUES('7844','TURNER','SALESMAN','7698','1981-09-08','1500','0','30');INSERTINTO`emp`VALUES('7876','ADAMS','CLERK','7788','1987-07-13','1100',null,'20');INSERTINTO`emp`VALUES('7900','JAMES','CLERK','7698','1981-12-03','950',null,'30');INSERTINTO`emp`VALUES('7902','FORD','ANALYST','7566','1981-12-03','3000',null,'20');INSERTINTO`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 tablescore(idint(4)notnullprimary key auto_increment,序列号stu_idint(4)notnull,学号c_namevarchar(10),课程名称gradefloat(4,2),分数foreignkey(stu_id)referencesstudent1(id)外键);create tablestudent1(idint(4)notnullprimary key,学号namevarchar(10),名字sexvarchar(10),性别birthvarchar(10),生日departmentvarchar(10),专业addressvarchar(10)家庭地址);
------------------------添加数据----------------------------------insertintoscorevalues(1,901,'计算机',98);INSERTINTOscoreVALUES(2,901,'英语',80);INSERTINTOscoreVALUES(3,902,'计算机',65);INSERTINTOscoreVALUES(4,902,'中文',88);INSERTINTOscoreVALUES(5,903,'中文',95);INSERTINTOscoreVALUES(6,904,'计算机',70);INSERTINTOscoreVALUES(7,904,'英语',92);INSERTINTOscoreVALUES(8,905,'英语',94);INSERTINTOscoreVALUES(9,906,'计算机',90);INSERTINTOscoreVALUES(10,906,'英语',85);INSERTINTOscoreVALUES(11,907,'计算机',98);insertintostudent1values(901,'张老大','男',1984,'计算机系','北京市海淀区');INSERTINTOstudent1VALUES(902,'张老二','男',1987,'中文系','北京市昌平区');INSERTINTOstudent1VALUES(903,'张三','女',1991,'中文系','湖南省永州市');INSERTINTOstudent1VALUES(904,'李四','男',1993,'英语系','辽宁省阜新市');INSERTINTOstudent1VALUES(905,'王五','女',1990,'英语系','福建省厦门市');INSERTINTOstudent1VALUES(906,'王六','男',1989,'计算机系','湖南省衡阳市');INSERTINTOstudent1VALUES(907,'老七','男',1991,'计算机系','广东省深圳市');INSERTINTOstudent1VALUES(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.查询每个科目的最高分的学生信息。
作者:老张_Jason
链接:https://www.jianshu.com/p/ce9e78a831da
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。