零基础入门MySQL,看完这篇就够了

对于测试同学来说,除了知道测试基础知识外,还需要掌握一些测试基本技能,主要有Linux、数据库、计算机网络等。

今天,我们就来聊一聊数据库,数据库是大学本科计算机系核心课程之一,其重要性不言而喻。

数据库在面试中基本属于必考内容,最多的就是手写SQL或口述SQL,面试官会给你出一个场景,比如班级、分数、课程之类的,一般考察表查询语句居多,例如多表查询、连接查询、子查询等。所以,当你准备转行踏入IT行业的时候,就首先需要掌握数据库。

本文主要科普作为一枚测试应该知道的数据库理论基础知识,知道这些不仅可以在面试时加分,而且可以加深你对数据库的理解,而不是仅仅停留在只会写几个SQL上面。

测试人员对于数据库理论知识的学习,肯定不需要像开发那么深入,但是一些基本的内容需要知道并掌握,简单来说,数据库基础,看完接下来的文章并搞明白就完全够用了。

当然,关于数据库进阶知识,比如数据库索引、事务、数据库三大范式、数据库调优、存储过程等内容也会在后续的文章中与大家讨论。

作为测试,数据库在日常工作中的权重占比还是比较大的,主要有以下几个应用场景:

  • 项目部署及部署完后数据的准备

    开发配置好环境,但是没有连接数据库,就需要我们自己新建数据库并连接。

    已经建好数据库,但是没有创建数据表,就需要我们自己创建数据表。

    已经创建好数据库和数据表,但是数据表中没有数据,就需要我们自己添加数据。

    数据表中有数据,但是数据量不够,开发只提供一两条样例数据,测试就需要大量造数据。

    项目的后台管理没有注册功能,就需要我们自己手动向数据表中插入用户名和密码。

    • 在前端页面增删改查,查看数据库是否做了相应更新,核对数据存储的准确性

      举栗1:在CRM项目中,新建客户以后,在数据库的表中查看是否与新建的客户信息一致。

      举栗2:支付交易产生的订单可以从数据库中查看订单是否真实存储,数据信息是否一致。

  • 对数据直接操作来满足测试用例所需的极限场景

    比如有些场景像CRM项目中的新建客户功能,我们只是要验证一个输入框的边界值,但是却需要在前端页面一直新建,一直提交保存,每次新建都需要填写暂时不需要测试的必填项,太麻烦,就可以直接去修改数据表中对应的字段值。

  • 性能测试或自动化测试通过脚本产生大量数据时,查看数据库是否批量有效存储

  • 通过操作数据库优化测试用例,提升测试效率

  • 前端输入框字段报错时,可能是数据库参数类型设置有误或字段长度不够,就可以打开数据库查看字段参数类型和长度是否正确

  • 性能测试,通过优化SQL语句或表结构来提高系统的性能,例如慢查询等

  • 造数据场景,构造某些用例的前置条件

    举栗1:统计年盈利额,需要1~12月都需要数据,不可能一个需求测一年吧,就可以在数据库中直接插入数据。

    举栗2:手机号注册时,通过改数据库表字段非唯一状态来重复使用一个手机号,进行反复注册。

    举栗3:通过修改金额、价格等用来做支付测试,比如原本需要100¥,就可以通过修改数据为0.01¥。

    举栗4:会员积分,就可以在数据库直接修改积分,看是否达到会员。

  • 理解如何通过接口操作数据库

  • 做测试结构分析时,可以通过数据库搞清楚数据流向,哪个表放哪个字段什么时候在哪里展示

and so on ……

以上,仅列举了一些日常工作中比较常见的场景,供大家参考。

同时欢迎评论区补充哦~

紧接着,就来介绍一下数据库以及常用的SQL语句。

认识数据库

什么是数据库?

数据库的英文单词:Database ,简称DB。

数据库方向的岗位叫DBA(Database Administrat),也就是数据库管理员,专门和数据库打交道的,属于运维工程师的一个分支,主要负责业务数据库从设计、测试到部署交付的全生命周期管理。

数据库实际上就是一个文件集合,是一个存储数据的仓库,本质就是一个文件系统,数据库是按照特定的格式把数据存储起来,用户可以对存储的数据进行增删改查操作。

简单概括,数据库就是用于存储和管理数据的仓库。

具体来说,就是前端页面用户输入的数据通过接口传给后端,然后存储到数据库中,同时也支持从数据库中取数据传给前端页面做一个展示。

数据库的两大分类

  • 关系型数据库:是建立在关系模型基础上的数据库,比如MySQL、Oracle、SQL Server、DB2、PostgreSQL等,还有一些国产的数据库比如达梦数据库、神通数据库、人大金仓数据库等。

  • 非关系型数据库(NO SQL):通常指数据之间无关系的数据库,比如MongoDB、Redis,以键值对的方式存储。

新手入门该学习哪个数据库?

上面说了这么多数据库,而目前企业中使用最多的就是MySQL和Oracle数据库,后者因为是收费的,所以互联网公司尤其是中小型企业使用最多的就是MySQL数据库,数据库的学习其实和编程语言一样,当你熟练掌握其中一种时,其他的也就分分钟上手了。

因此,推荐初学者从MySQL数据库开始学习。

MySQL简介

  • MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发。
  • 世界上最流行的几款数据库之一。
  • 优点:是一款轻量级数据库、免费、开源、适用于中大型网站。
  • MySQL默认端口号:3306。

数据库服务器、数据库和表的关系

  • 所谓安装数据库服务器,只是在机器上装一个数据库管理系统(比如: MySQL、Oracle、SQL Server),用来管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。

  • 为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。

Xshell、Xftp、Navicat

 

PS:Xshell或Xftp连接Linux服务器默认端口:22

SQL介绍

Structured Query Language:结构化查询语言。

SQL是专门为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”命令,“怎么做”是不用使用者考虑的。

SQL语法特点

  • 不区分大小写。
  • 关键字、字段名、表名需要用空格或逗号隔开。
  • 每一个SQL语句是用分号结尾。
  • 语句可以写一行也可以分开写多行。

如何自学数据库

在哪里练习?想要练习数据库需要首先需要有数据的环境,有以下两种方法:

  1. 本地安装一个数据库,例如MySQL

  2. 推荐在线练习SQL网站:www.nowcoder.com/ta/sql

    可以在线练习SQL实战,会根据你的输入实时判断对错,不会的话还可以参考别人写的SQL语句。

数据库常用操作命令

1. MySQL登录

 

 

 

2. MySQL退出

  • exit

  • quit 

3. 创建、查看、删除、使用数据库

  1. 创建数据库命令

    • 创建数据库:

      格式:create database [数据库名称];

      例如:

  • 创建数据库,并指定字符集:

格式:create database [数据库名称] character set [字符集名];

例如:

  • 创建数据库,并指定字符集、排序规则:

格式:create database [数据库名称] character set [字符集名] collate [排序规则];

例如:

2.查看数据库命令

  • 显示所有数据库:

 

  • 模糊查询数据库: 

 

  • 查看查询某个数据库的创建语句、字符集:

格式:show create database [数据库名称];

例如:

3.删除数据库命令

格式:drop database [数据库名称];

例如:

4.选中某个数据库

格式:use [数据库名称];

例如:

PS:这个命令可以不加分号。

4. 创建、查看、删除、修改数据表

数据在数据库中的存储方式

表中列的数据类型——数值型

类型大小用途
TINYINT1字节小整数值
SMALLINT2字节大整数值
MEDIUMINT3字节大整数值
INT或INTEGER4字节大整数值
BIGINT8字节极大整数值
FLOAT4字节单精度浮点数值
DOUBLE8字节双精度浮点数值
DECIMAL对于DECIMAL(M,D),如果M>D则为M+2,否则为D+2小数值

有符号和无符号(UNSIGNED)

在计算机中,可以区分正负的类型,称为有符号类型。

无正负的类型,称为无符号类型。

简单的理解为就是,有符号值可以表示负数、0、正数,无符号值只能为0或者正数。

FLOAT、DOUBLE、DECIMAL

FLOAT(10,2):总长度为10,小数点后有2位。

DOUBLE和DECIMAL也类似。

超出范围会四舍五入。

表中列的数据类型——字符型

  • CHAR:定长字符串。CHAR(4) -- ' d'
  • VARCHAR:变长字符串。VARCHAR(4) -- 'd'
  • CHAR的查询效率要高于VARCHAR。

表中列的数据类型——日期型

类型
DATE
TIME
YEAR
DATETIME
TIMESTAMP

TIMESTAMP和DATETIME的异同:

  • 相同点:两者都可以用来表示YYYY-MM-DD HH:MM:SS类型的日期。
  • 不同点:
    • 两者的存储方式不一样:
      • 对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,又将其转化为客户端当前时区进行返回。(PS:中国时区为+8区)
      • 而对于DATETIME,不做任何改变,基本上是原样输入和输出。
    • 两者所能存储的时间范围不一样:
      • TIMESTAMP所能存储的时间范围为:'1970-01-01 00:00:01.000000'到'2038-01-19 03:14:07.999999'
      • DATETIME所能存储的时间范围为:'1000-01-01 00:00:00.000000'到'9999-12-31 23:59:59.999999'

数据表操作命令

创建表

  1. 创建表基础命令

  1. 注意:

    • 创建表前,要先选中某个数据库(use [数据库名称]);
    • 列和列之间用逗号隔开,列内用空格隔开;
    • 创建表时,要根据需保存的数据创建相应的列,并根据要存储数据的类型定义相应的列类型。
  2. 约束条件

    约束条件就是给列加一些约束,使该字段存储的值更加符合我们的预期。

约束条件含义
UNSIGNED无符号,值从0开始,无负数
ZEROFILL零填充,当数据的显示长度不够的时候可以使用填补0的效果填充至指定长度,字段会自动添加UNSIGNED
NOT NULL非空约束,表示该字段的值不能为空
DEFAULT表示如果插入数据时没有给该字段赋值,那么就使用默认值
PRIMARY KEY主键约束,表示唯一标识,不能为空,且一个表只能有一个主键
AUTO_INCREMENT自增长,只能用于数值列,默认起始值从1开始,每次增长1
UNITQUE KEY唯一值,表示该字段下的值不能重复,可以为空,可以有多个
COMMENT描述

注意:

如果一列同时有UNSIGNED、ZEROFILL、NOT NULL这几个约束,UNSIGNED、ZEROFILL必须在NOT NULL前面,否则会报错。

例子:

查看表

  1. 显示当前数据库中所有表的名字

    格式:

2.显示某张表每一列的属性(列名、数据类型、约束)

格式:desc [数据表名称];

例如:

 

删除表

格式:drop table [数据表名称];

例如:

修改表

  1. 向数据表中添加一列

    格式:ALTER TABLE [数据表名称] ADD [列名] [列的数据格式] [约束];

    例如:

  1. PS:

    • 默认自动添加到数据表字段的末尾;

    • 如果要加在第一列在最后加个FIRST;

    • 如果要加在某一列的后面,在最后面加个AFTER某一列列名。

  2. 删除数据表的某一列

    格式:ALTER TABLE [数据表名称] DROP [列名];

  3. 修改列的类型和名称

    ALTER TABLE [表名] MODIFY [列名] [数据格式];(列名不变,其他要变)

    ALTER TABLE [表名] CHANGE [旧列名] [新列名] [数据格式];(列名也要改变)

5.数据表的增删改查

增(insert)

删(delete)

语法:

  1. delete from 表名 where 条件
  2. delete语句不能删除某一列的值。(可以使用 update 表名 set username = "" where userid = 1)
  3. 使用delete语句仅删除符合where条件的行的数据,不删除表中其他行和表本身。
  4. truncate user_info_table(直接把数据清空掉)

drop和delete的区别:

  • drop是删除数据库、数据表、数据表中的某一列。
  • delete是删除某一行数据。

改(update)

语法:

  1. update [表名] set [列名]=[新值] where [列名]=[某值];
  2. update语法可以新增、更新原有表行中的各列。
  3. set子句指示要修改哪些列和要给予哪些值。
  4. where子句指定应更新哪些行。如果没有where子句,则更新所有的行。

查(select)

文末练习题中会给出查询语句相关示例。

6. 数据表的排序、聚合命令、分组

排序(order by)

  • 使用order by子句,对查询结果进行排序。

  • order by 指定排序的列 asc(升序)/desc(降序)。

  • order by 子句一般位于select语句的结尾。

聚合命令

  1. distinct:对某一列数据去重。

    语句:select distinct 列名 from 表名; -- 显示此列不重复的数据

  2. count:统计总行数。

  • count(*):包括所有列,返回表中的总行数,在统计结果的时候,不会忽略值为Null的行数。
  • count(1):包括所有列,1表示一个固定值,没有实际含义,在统计结果的时候,不会忽略列值为Null的行数,和count(*)的区别是执行效率不同。
  • count(列名):只包括列名指定列,返回指定列的行数,在统计结果的时候,不统计列值为Null,即列值为Null的行数不统计在内。
  • count(distinct 列名):返回指定列的不重复的行数,在统计结果的时候,会忽略列值为NULL的行数(不包括空字符和0),即列值为NULL的行数不统计在内。
  • count(*)、count(1)、count(列名)执行效率比较:
  • 如果列为主键,count(列名)优于count(1)

  • 如果列不为主键,count(1)优于count(列名)

  • 如果表中存在主键,count(主键列名)效率最优

  • 如果表中只有一列,则count(*)效率最优

  • 如果表中有多列,且不存在主键,则count(1)效率优于count(*)

  1. MAX:最大值

  2. MIN:最小值

  3. AVG:平均值

  4. SUM:求和

  5. limit

    语法:

  • select * from 表名 limit m,n;
  • 其中m是指从哪行开始,m从0取值,0表示第一行。
  • n是指从第m+1条开始,取n条。
  • select * from 表名 limit 0,2(从第一行开始,显示两行结果)
  • 如果只给定一个参数,它表示返回最大的行数目:
  • select * from table limit 5;查询前5行
  • limit n 等价于 limit 0,n 

分组

语法:GROUP BY

  • 使用group by子句对列进行分组。

  • 还可以使用having子句过滤,having通常跟在group by后,它作用于组。

  • 不加having过滤:select 列名,聚合函数 from 表名 where 子句 group by 列名;

  • 加上having过滤:select 列名,聚合函数 from 表名 where 子句 group by 列名 having 聚合函数 过滤条件;

  • 注意:使用group by后只能展示分组的列名+聚合函数结果,因为其余列已经基于分组这一列合并。

7. 数据表的连接查询、子查询

两张表连接查询

INNER JOIN(内连接):获取两个表中字段匹配关系的行的所有信息。

语法:SELECT * FROM [表名] a INNER JOIN [表名] b ON a.[列名] = b.[列名];

例如:

LEFT JOIN(左连接):以左表为基准,获取左表所有行的信息,即使右表没有对应匹配的行的信息。右表没有匹配的部分用NULL代替。

语法:SELECT * FROM [表名] a LEFT JOIN [表名] b ON a.[列名] = b.[列名];

RIGHT JOIN(右连接):与左连接相反,以右表为基准,用于获取右表所有记录,及时左表没有对应匹配的行的所有信息,左表没有匹配的部分用NULL代替。

语法:SELECT * FROM [表名] a RIGHT JOIN [表名] b ON a.[列名] = b.[列名];

子查询(嵌套查询)

  • 嵌套在其他查询中的查询。
  • 语句:select 列名1 from 表1 where 列名2 in (select 列名2 from 表2 where 列名3 = 某某某);
  • 注意:一般在子查询中,程序先运行嵌套在最内层的语句,再运行外层。因此在写子查询语句时,可以先测试一下内层的子查询语句是否输出了想要的内容,再一层一层往外测试,增加子查询的正确率。

其他注意事项数据库名和表名在Windows中是大小写不敏感的,但是在大多数类型的UNIX系统中大小写是敏感的。

笔试面试题

一、创建如下要求的表格,并完成相应的题目。

 

 

 

 

 

 

 

 

 

 

二、创建如下要求的表格,并完成相应的题目。

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值