700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 数据库知识点太多?作为测试掌握这些就够了【精简重点版 >直击面试>建议收藏】

数据库知识点太多?作为测试掌握这些就够了【精简重点版 >直击面试>建议收藏】

时间:2022-06-01 21:45:11

相关推荐

数据库知识点太多?作为测试掌握这些就够了【精简重点版 >直击面试>建议收藏】

目录

一、前言二、前期准备三、增删改查数据(下列的Sql无须区分大小写)四、条件查询讲解五、十个必须掌握的关键字查询六、高频面试问题(连接查询、索引、事务)一、连接查询二、索引三、事务七、总结往期博文

一、前言

很多博主总结的数据库知识很全面!

但如果作为测试的话,往往不需要掌握那么多,无论是日常工作还是面试仅需掌握一些基础和常用的点就足够了!

本文主要是针对测试小伙伴总结的精简重点版数据库sql知识点!能够让你花更少的时间致于应付绝大部分面试和工作!

【Python测试交流群:8140 78962】

二、前期准备

1.安装Navicat Mysql或navicat Premium

2.安装mysql(若有公司测试服务器地址可以不安装直连测试数据库即可)

3.打开navicat连接mysql服务

4.打开navicat连接,创建一个数据库(无须考虑字符集、排序规则为什么要这样填写,测试不需要了解,可自行私下了解)

5.我们需要准备一些班级数据和学生数据,在创建的数据库中新建一个查询

6.粘贴如下sql

SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for class-- ----------------------------DROP TABLE IF EXISTS `class`;CREATE TABLE `class` (`id` int(11) NOT NULL,`class_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,`created` datetime(6) NOT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Records of class-- ----------------------------INSERT INTO `class` VALUES (1, '一班', '-07-17 13:40:30.000000');INSERT INTO `class` VALUES (2, '二班', '-07-18 13:40:48.000000');INSERT INTO `class` VALUES (3, '三班', '-07-19 13:40:48.000000');-- ------------------------------ Table structure for student-- ----------------------------DROP TABLE IF EXISTS `student`;CREATE TABLE `student` (`id` int(11) NOT NULL,`created` datetime(6) NOT NULL,`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`class_id` int(11) NOT NULL,`gender` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,`height` int(3) NOT NULL,`weight` int(3) NOT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Records of student-- ----------------------------INSERT INTO `student` VALUES (1, '-07-19 13:42:35.000000', '张顺', 1, 'male', 170, 65);INSERT INTO `student` VALUES (2, '-07-19 13:42:35.000000', '张玲', 1, 'female', 170, 65);INSERT INTO `student` VALUES (3, '-07-19 13:42:35.000000', '李广', 2, 'male', 180, 68);INSERT INTO `student` VALUES (4, '-07-19 13:42:35.000000', '李三四', 2, 'female', 170, 65);INSERT INTO `student` VALUES (5, '-07-19 13:42:35.000000', '赵云', 3, 'male', 199, 100);INSERT INTO `student` VALUES (6, '-07-19 13:42:35.000000', '马超', 3, 'female', 171, 66);INSERT INTO `student` VALUES (7, '-07-19 13:42:35.000000', '诸葛亮', 3, 'male', 170, 65);INSERT INTO `student` VALUES (8, '-07-19 13:42:35.000000', '刘备', 3, 'male', 202, 105);INSERT INTO `student` VALUES (9, '-07-19 13:42:35.000000', '曹操', 3, 'male', 181, 80);INSERT INTO `student` VALUES (10, '-07-19 13:42:35.000000', '黄忠', 2, 'female', 166, 50);SET FOREIGN_KEY_CHECKS = 1;

7.按图中操作

8.点击目录的表名可查看到创建的数据

9.两张表的结构

class表字段(列)说明

1.id:班级id(唯一)

2.class_name:班级名称

3:created:创建班级的时间

student表字段(列)说明

1.id:学生id(唯一)

2.name:学生名称

3:created:创建学生的时间

4:class_id:所属班级,与班级id做关联

5.gender:学生性别

6.height:学生身高

7.weight:学生体重

三、增删改查数据(下列的Sql无须区分大小写)

1.增加数据(INSERT INTO)

语法:INSERT INTO 表名 VALUES (‘表字段名1’,‘表字段名2’,.....);

例如我们想新增一条班级id为4,班级名称为“自建一班”,创建时间为“-07-19 13:40:30.000000”的数据就可以这样写

INSERT INTO `class` VALUES (4, '自建一班', '-07-19 13:40:30.000000');

刚插入的数据

2.删除数据(delete和truncate)

2.1 delete

语法:DELETE FROM 表名 WHERE 字段名 = 值

例如我们想删除刚刚创建的班级数据,我们知道刚刚创建的班级数据它的id为4,名称为自建一般,那我们可以有如下两种写法

DELETE FROM class WHERE id=4;DELETE FROM class WHERE class_name='自建一班';

2.2 truncate

语法:truncate 表名

例如我们想删除所有班级数据,则可以这样写

truncate class;

它会把班级表的所有数据都删除掉

2.3drop(删表)

语法:drop 表1名,表2名,...;

例如我们想删除class表和student表,则可以这样写

DROP TABLE class,student;

他会把两张表全部删除掉

删除后,记得重新执行步骤一第6步的sql,为后续教程的数据做准备

2.4delete、truncate、drop的区别

简单来说:

drop用于删表(表中数据会全部删除,无法回滚),delete和truncate用于删除表中的数据(delete也可删表)。通过delete删除的数据可以回滚,而truncate删除的则不能。

他们的级别为:drop>truncate>delete

delete操作不会减少表或索引所占用的空间,truncate会将占用的恢复至初始大小。

举个例子:如果设置了自增id,有id为1、2、3的三条数据,如果通过delete全部删除后,下次插入的数据如果没有指定id的话,那它的id会为4

如果通过truncate删除这三条数据的话,那它的id会为1

3.修改数据(update)

语法:update 表名 set 字段名=值

例如我们想把三班的名称改为“自建三班”,则可以这样写

UPDATE class set class_name='自建三班' WHERE id=3

就可以把三班的名称改为“自建三班”,如果没有带where id=3则所有的班级名称都会变为“自建三班”

4.查询数据

语法:SELECT 字段名1,字段名2,... FROM 表名

4.1例如我想查学生的姓名和性别,则可以这样写

SELECT `name`,gender from student;

4.2 如果想查学生的全部信息那sql字段名处可以用*号代替

SELECT * from student;

查询结果

4.3只想查性别为男的学生信息,可以这样写

SELECT * from student where gender='male';

查询结果

4.4 查询姓张的女同学

SELECT * from student where `name` like '张%' and gender='female';

查询结果

四、条件查询讲解

查询符合设定条件的数据

语法:select * from 表名 where 条件;

1.比较运算符

等于=小于<大于>大于等于>=小于等于<=不等于!=或者<>

查询身高大于170的学生:SELECT * from student WHERE height>170;

查询体重小于等于70的学生:SELECT * from student WHERE weight<=70;

查询不在“三班”的学生:SELECT * from student WHERE class_id!=3;

2.逻辑运算符

andornot

查询性别为女且身高大于170的女生:SELECT * from student WHERE gender='female' and height>170;

查询性别为男或者体重小于70的学生:SELECT * from student WHERE gender='male' or weight<70;

查询不在三班的学生:SELECT * from student WHERE not class_id=3;

3.模糊查询

like_代表一个任意字符代表多个任意字符

查询姓李的学生:SELECT * from student WHERE name like '李%';

查询姓李且名字有三个字的学生:SELECT * from student WHERE name like '李__';

4.集合查询

in,代表是否在这个集合中

查询身高为165,170的学生:SELECT * from student WHERE height in (165,170);

查询身高不为165,170的学生:SELECT * from student WHERE height not in (165,170);

1.5优先级

1.小括号>not>比较运算符>逻辑运算符

2.and>or

五、十个必须掌握的关键字查询

1.BETWEEN

查询两个值之间的数据

语法:select * from 表名 where 字段名 between 值 and 值;

查询体重在65-70的学生:

select * FROM student WHERE weight BETWEEN 65 AND 70;

2.AS

为字段名指定别名

语法:select 字段名1 AS 别名,字段名2 AS 别名,.... from 表名

将字段名name改为别名学生名称显示:

select name AS '学生名称' FROM student

3.Distinct

查询时忽略重复值

语法:SELECT DISTINCT 字段名 FROM 表名

查询学生所在的班级有哪些:

select DISTINCT class_id FROM student

4.SUM

求和

语法:select SUM(字段名) from 表名;

查询学生总身高:

select SUM(height) AS '学生总身高' FROM student;

5.COUNT

返回匹配指定条件的行数。

语法:select COUNT(字段名) from 表名;

查询有多少学生:

select count(*) FROM student;

6…AVG

计算平均值

语法:select AVG(字段名) from 表名;

计算学生平均身高:

select AVG(height) AS '学生平均身高' FROM student;

7.GROUP BY

根据一或多个字段对查询结果集进行分组

语法:select 字段名 关键字(字段名) from 表名 group by 字段名;

查询男生、女生各有多少:

SELECT gender,count(id) FROM student GROUP BY gender

8.ORDER BY

对结果集进行排序

语法:select 字段名 from 表名 order by 字段名 升/降序关键字;

对学生身高降序排列(由高到矮):

SELECT * FROM student ORDER BY height desc;

对学生体重升序排列(由轻到重):

SELECT * FROM student ORDER BY weight asc;

9.limit

返回查询结果的数目

语法:select 字段名 from 表名 limit 开始条数,结尾条数;

返回前三条学生信息:

SELECT * FROM student LIMIT 1,3;

10.having

当我们用到聚合函数(sum、count等),又需要筛选条件时,having就派上用场了,因为WHERE是在聚合前筛选记录的,having和group by是组合一起再聚合后使用

语法:没有固定语法

查班级人数大于等于3的班级:

SELECT count(*) FROM student GROUP BY class_id HAVING COUNT(id)>=3;

六、高频面试问题(连接查询、索引、事务)

一、连接查询

1.左连接——LEFT JOIN(需掌握)

说明:返回左表中的所有记录和右表中与连接字段相等的记录,如果右表没有匹配的记录,那么就以空(Null)代替显示

语法:

select 字段 from 左表表名 左表的变量名(自定义) LEFT JOIN 右表表名 右表的变量名(自定义)on 左表变量名.左表字段=右表变量名.右表字段

举例:

1)查询学生及其所在的班级信息:

SELECT * FROM student a LEFT JOIN class b on a.class_id=b.id

结果:

2)如果有学生在四班(class_id=4),但在班级表没有四班(id=4),它的查询结果会是怎样的呢?

现在我们插入一名在四班的学生:

INSERT INTO student VALUES (11, '-07-26 13:42:35.000000', '刘德华', 4, 'male', 180, 76);

插入后,student表的数据:

再执行查询学生及其所在的班级信息的sql:

SELECT * FROM student a LEFT JOIN class b on a.class_id=b.id

结果:

新插入名叫“刘德华”的学生的班级信息显示为空了。

所以,左连接就是:返回左表中的所有记录和右表中与连接字段相等的记录,如果右表没有匹配的记录,那么就以空(Null)代替显示。

2.右连接——RIGHT JOIN

说明:与左连接相反:返回右表中的所有记录和左表中与连接字段相等的记录,如果左表没有匹配的记录,那么就以空(Null)代替显示。**

3.内连接——INNER JOIN(需掌握)

说明:只返回两个表都与连接字段相等的记录

举例:

1)还是以查询学生及其所在的班级信息:

SELECT * FROM student a INNER JOIN class b on a.class_id=b.id;

结果:

发现名叫“刘德华”的学生没有显示在查询结果中了

而最开始通过左连接的方式查询,会将“刘德华”查询出来,但它对应的班级信息会显示为空:

所以,内连接就是:只返回两个表都与连接字段相等的记录

4.复合条件连接查询——带where条件的连接查询(了解就行)

说明:连接查询还可以与where条件联用

举例:

1)查询性别为男的学生及其所在的班级信息:

SELECT * FROM student a LEFT JOIN class b on a.class_id=b.id WHERE a.gender='male';

结果:

二、索引

说明:实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

面试会经常问你数据库索引是什么?

答:索引类似于一本书前面的目录,能够提高检索效率从而提升性能。

作为测试我们一般有如此回答就够了,但有一些比较高级测试岗位或面试官问的比较多的时候,还会问索引的优缺点是什么:

答:

优点:

1.大大加快数据的检索速度,这也是创建索引的最主要的原因

2.加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

3.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

缺点:

1.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大

2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。

我们还需要掌握一些索引知识:

索引常用哪几种类型:

1.普通索引:仅快速查询

2.唯一索引:加速查询+列值唯一(可以有null)

3.主键索引:加速查询+列值唯一(不可以有null)+表中只有一个

4.全文索引:对本文的内容进行分词,进行搜索

三、事务

对于测试而言,事务只需要知道它是用来保证数据库一致性这个概念就足够了

下面再对事务的特点简单介绍一下:

1.在 MySQL 中只有使用了 Innodb 数据库引擎的库或表才能够使用事务!

2.事务能够用来维护数据库的完整性,保证 SQL 语句要么全执行,要么都不执行,举个简单的例子:

去ATM机取钱,如果这个时候发现余额扣款了。但未出钞!事务会进行回滚将你的银行卡余额重新变回去。

3.事务用来管理 insert,update,delete 语句。

七、总结

作为测试,掌握这些的数据库知识已经足够应付日常工作和绝大部分面试了

分享暂时到这里,小伙伴们点赞、收藏、评论是对我最大的支持!!

往期博文

元组不可变,你真的确定吗?有了列表,元组存在的意义又是什么?【一文搞懂】

Python通过字符串来执行函数甚至代码!这么顶的操作快来了解下!

Pycharm用着卡还收费!何不试试VSCode!一文学会VSCode使用python

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。