关于软件测试的MySQL基础
1.数据库和SQL是什么关系
数据库里面放着数据,而SQL是用来操作数据库里数据的语言(工具)。
相当于有一碗米饭(碗就是mysql,里面放的米是数据),你要吃碗里的米饭,拿什么吃?拿筷子(sql)。用筷子(sql)操作碗里(mysql)的米饭(数据)
2.数据库有哪些
Oracle是最挣钱的数据库,出自甲骨文公司,市场占有率非常高,功能非常强大,被一些大型企业,电信,银行,证券公司所使用
.
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。MySQL目前最流行的开源数据库,被甲骨文公司所占用,威胁着老大Oracle的地位,开源,免费,支持多平台,易用
.
SQLServer,微软开发的数据库,仅支持Windows操作系统,号称是windows上最好用的数据库。数据库的天下不仅仅是MySQL和Oracle的,SQLServer也正在慢慢崛起,微软网罗了不少数据库的专家,推出了不少重磅功能。
.
MongoDB,最好用的文档型数据库,是NOSQL类型数据库的领导者之一,也是当前最成功的NoSQL类型数据库,数据存储格式采用JSON形式,非常灵活。
.
Redis,最好的内存级数据库,查询效率极高,并且在Redis 3.0之后,支持多种数据类型,String,Set,List,Hash等类型,开始支持集群,弥补了自身短板。是目前做缓存最流行的数据库
.
Neo4J,最好的图形化数据库,流行话较低,但是图形化数据库的绝对领导者。
.
SQLite,最流行的嵌入式数据库,占领手机行业的绝对领导者地位,Android和IOS两大手机系统,都内嵌了SQLite数据库,SQLite是一个完整的关系型数据库,支持标准SQL,支持事务操作,程序包非常小,是嵌入式设备的最佳选择。
3.MySQL数据库的安装配置
首先关于数据库的安装我就不在赘述了,有问题的同学可以自行百度一下哈
4.DDL——数据库定义语言
4.1表中字段基本数据类型
4.1.1整形
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 字节 | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
4.1.2浮点型(float 和 double)
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
FLOAT | 4 字节 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度浮点数值 |
DOUBLE | 8 字节 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度浮点数值 |
4.1.3定点数
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
decimal(m,d) 参数 m<65 是总个数,d<30 且 d<m 是小数位。
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
4.1.4字符串
char 和 varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以 char 类型存储的字符串末尾不能有空格,varchar 不限于此。
2.char(n) 固定长度,char(4) 不管是存入几个字符,都将占用 4 个字节,varchar 是存入的实际字符数 +1 个字节(n<=255)或2个字节(n>255),所以 varchar(4),存入 3 个字符将占用 4 个字节。
3.char 类型的字符串检索速度要比 varchar 类型的快。
varchar 和 text:
1.varchar 可指定 n,text 不能指定,内部存储 varchar 是存入的实际字符数 +1 个字节(n<=255)或 2 个字节(n>255),text 是实际字符数 +2 个字节。
2.text 类型不能有默认值。
3.varchar 可直接创建索引,text 创建索引要指定前多少个字符。varchar 查询速度快于 text, 在都创建索引的情况下,text 的索引似乎不起作用。
4.1.5二进制数据(_Blob)
1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。
2._BLOB存储的数据只能整体读出。
3._TEXT可以指定字符集,_BLO不用指定字符集。
4.1.6日期时间类型
MySQL数据类型 | 含义 |
---|---|
date | 日期 ‘2008-12-2’ |
time | 时间 ‘12:25:36’ |
datetime | 日期时间 ‘2008-12-2 22:06:44’ |
timestamp | 自动存储记录修改时间 |
若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。
4.1.7关键字
MySQL关键字 | 含义 |
---|---|
NULL | 数据列可包含NULL值 |
NOT NULL | 数据列不允许包含NULL值 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键 |
AUTO_INCREMENT | 自动递增,适用于整数类型 |
UNSIGNED | 无符号 |
CHARACTER SET name | 指定一个字符集 |
4.2数据库语句操作
使用 create 命令创建数据库
CREATE DATABASE 数据库名
create database mydb1
drop 命令删除数据库
删除创建的数据库drop database mydb1
选择数据库user mydb1
查看数据库创建细节
show create database mydb1
创建一个使用gbk字符集的数据库
create database mydb2 character set gbk
4.3表结构语句操作
创建表
create table student(id int,name varchar(20),sex varchar(20),age int,salery float(6,2),birthday date)
删除表drop table student
查看所有表show tables
查看表的创建细节show create table student
展示表结构desc student
在原有的学生基础上添加address列alter table student add address varchar(20)
在原有的学生基础上删除address列alter table student drop address
4.4定义表的约束
- 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
- AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。 PRIMARY
- KEY关键字用于定义列为主键。为了标识数据库记录唯一性,不允许记录重复,且键值不能为空,主键也是一个特殊索引。
- 您可以使用多列来定义主键,列间以逗号分隔。 UNIQUE KEY的用途:主要是用来防止数据插入的时候重复的 ENGINE
- 设置存储引擎,CHARSET 设置编码
5.DML-数据库操作语言
5.1插入数据
insert into student values(1,’zhangsan’,’nan’,19,389.10,’1999-10-10’);
查询select * from student
插入中文会报错
insert into student values(2,’李四’,’男’,19,389.10,’1999-10-10’);
通知服务器客户端使用的编码是gbkset character_set_client=gbk;
通知服务器客户端查看结果集使用的编码是 gbkset character_set_results=gbk;
insert into student(id,name,sex,age) values(3,’王五’,’男’,19);
5.2删除数据
删除单条数据delete from student where id=1;
删除所有数据delete from student;
摧毁表truncate table student;
5.3修改数据
设置所有人的年龄加10岁update student set age=age+10
修改zhangsan 为张三update student set name=’张三’ where name=’zhangsan’
修改王五的salery和出生日期update student set salery=100.01,birthday=’1999-10-10’ where id=3
6.DQL数据库查询语言
6.1普通条件查询
查询所有学生信息select * from student;
查询id为1的学生信息select * from student where id=1;
查询id为1的学生姓名select name from student where id=1;
查询数学成绩大于80的同学成绩select * from student where math>80
查询所有学生成绩,并输出结果为 姓名 语文 英语 数学 select name as 姓名,chinese as 语文,english as 英语,math as 数学 from student
查询所有成绩及数学分+10分select *,(math+10)from student
统计每个学生的总分select name,(math+english+chinese) as 总分 from student
查询总分大于230分的同学select * from student where (math+english+chinese)>230
查询数学成绩在80-90之间的同学select * from student where math between 80 and 90
查询数学语文英语都大于80的同学成绩select * from student where math>80 and english>80 and chinese >80;
查询数学成绩在 80 60 90内的同学select * from student where math in(80,60,90);
6.2模糊查询
查询所有姓名中包含张的同学select * from student where name like ‘%张%’
6.3排序查询
按照数学成绩从小到大查询select * from student order by math;
按照数学成绩从大到小查询select * from student order by math desc;
6.4分页查询
limit是mysql的语法select * from table limit m,n
其中m是指记录从m+1开始,N代表取n条记录。
取出第3条至第6条,4条记录select * from student limit 2,4
查询出数学成绩由高到低前两名select * from student order by math desc limit 0,2;
6.5分组查询
select * from employee group by sex;
分组查询加条件select * from employee group by sex having age>18;
- having 条件表达式:用来分组查询后指定一些条件来输出查询结果
- having作用和where一样,但having只能用于group by
6.6报表查询
count 个数
sum 总数
avg 平均数
max 最大值
min 最小值
统计班级里边有多少学生select count(*)from student;
统计总成绩大于250分的人数select count(*)from student where (math+english+chinese)>250;
统计班级里边各科总成绩select sum(math),sum(english),sum(chinese) from student
统计所有科目的总成绩select sum(math+english+chinese) from student;
统计一下语文平均成绩
select sum(chinese)/count(*) from student;
select avg(chinese) from student;
统计一下班级语文最高分和最低分
select max(chinese) from student;
select min(chinese) from student;
报表查询订单根据名称合并后,总价格>10000的商品select * from orders group by product having sum(price) >7000
7.多表设计
7.1一对一
一张表的一条记录一定只能与另外一张表的一条记录进行对应,反之亦然。
有时候,为了业务,或者避免一张表中数据量过大,过复杂,在开发中会进行一对一方式来设计表。
7.2一对多(1方建主表(id为主键字段), 多方建外键字段)
指的是一个实体的某个数据与另外一个实体的多个数据有关联关系, 一对多的关系在设计的时候,需要设计表的外键
constraint 约束
foreign key就是表与表之间的某种约定的关系,由于这种关系的存在,能够让表与表之间的数据,更加的完整,关连性更强。
表的外键必须是另一张表的主键
补一个外键的概念(默认是约束): 删除主键信息时,当该主键字段值在外键表中存在时,该记录是不能删除的。—要把外键表是的相关信息删除之后,才能删除。
7.3多对多
一个实体的数据对应另外一个实体的多个数据,另外实体的数据也同样对应当前实体的多个数据。
一个学生可以有多个老师,一个老师可以教多个学生
解决方案:创建一个中间表,专门用来维护多表之间的对应关系,通常是能够唯一标识出数据的字段(主键)
查询李老师所教的学生
select id from teacher where name=’李老师’
select student_id from teacher_student where teacher_id=idselect * from student where id in(select student_id from teacher_student where teacher_id =(select id from teacher where name='李老师'));
查询张三的所有老师
select * from teacher where id in(select teacher_id from teacher_student where student_id=(select id from student where name='张三'));
8.连接查询
定义表结构
create table customer(id int primary key auto_increment,name varchar(20),city varchar(20));create table orders(id int primary key auto_increment,good_name varchar(20),price float(8,2),customer_id int);
insert into customer (name,city) values('李老师','东北');
insert into customer (name,city) values('崔老师','山西');
insert into customer (name,city) values('张老师','内蒙');
insert into customer (name,city) values('闫老师','天津');insert into orders(good_name,price,customer_id) values('电脑',59,1);insert into orders(good_name,price,customer_id) values('笔记本',88,2);insert into orders(good_name,price,customer_id) values('吹风机',99,1);insert into orders(good_name,price,customer_id) values('香水',300,3);insert into orders(good_name,price,customer_id) values('牛奶',100,6);
8.1交叉查询
交叉查询,又叫笛卡尔积查询,会将左表和右表的信息,做一个乘积将所有信息查询出来,会产生临时表,比较占用内存,生成的记录数=表1 X表2
select * from customer,orders;
select * from customer cross join orders;
8.2内连接查询
内连接,inner join on 查询两张表,设定条件,将两张表中对应的数据查询出来
不会产生笛卡尔积,不会产生临时表,性能高
select * from customer c inner join orders o on c.id=o.customer_id;
select * from customer,orders where customer.id=orders.customer_id;
select * from customer c,orders o where c.id=o.customer_id;
8.3左外连接
左外连接 left join on 设定条件,将两张表对应的数据查询出来,同时将左表自己没有关联的数据也查询出来
注意:join前面是左,后面是右
select * from customer c left join orders o on c.id=o.customer_id;
8.4右外连接
右外连接 right join on 设定条件,将两张表对应的数据查询出来,同时将右表自己没有关联的所有数据查询出来
select * from customer c right join orders o on c.id=o.customer_id;
8.5联合查询
select * from customer left join orders on customer.id=orders.customer_id having price>20;
关于软件测试的MySQL基础相关推荐
- 【面试宝典】软件测试工程师2021烫手精华版(第三章Mysql基础篇)
第三章 Mysql 基础 一. 基础知识 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库 什么是关系型数据库,主键,外键,索引分别是什么? 关系型数据库是由多张能 ...
- 面试官都拜服的,软件测试面试题之Mysql基础!
Mysql 基础知识点击领取学习资料 1. 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库 2. 什么是关系型数据库,主键,外键,索引分别是什么? 关系型数据库是 ...
- mysql基础之视图
原文:mysql基础之视图 在查询中,我们经常把查询结果 当成临时表来看. View是什么? View可以看一张虚拟表. 是表通过某种运算得到的一个投影. 既然视图只是表的某种查询的投影,所以主要步骤 ...
- MySQL基础day03_数据的导入、导出-MySQL 5.6
MySQL基础day03_数据的导入.导出-MySQL 5.6 注:把数据按照一定格式存放到文件里才能进行数据的导入. 1,数据导入的条件 把文件里的内容保存到数据的表里: 把数据按照一定格式存放文件 ...
- MySQL基础篇:子查询
文章目录 概述 where型子查询 from型子查询 EXISTS型子查询 复制表子查询 概述 在某些情况下,当进行一个查询时,需要的条件或数据要用另一个select语句的结果,这个时候,就要用到** ...
- mysql 存储引擎 面试_搞定PHP面试 - MySQL基础知识点整理 - 存储引擎
MySQL基础知识点整理 - 存储引擎 0. 查看 MySQL 支持的存储引擎 可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...
- mysql 基础篇(二) 账号、权限管理
mysql 基础篇(二) 账号.权限管理.备份与还原 建立账号密码: Grant all on test.* to "cj"@"localhost" ident ...
- MySQL:基础—数据分组
MySQL:基础-数据分组 1.为什么要分组: 比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量. 如果只找一个 ...
- linux mysql运维_Linux运维常用的 MySQL基础命令
# MySQL基础命令 ------------- ### 创建MySQL库,授权. >create database mysqldb character set utf8; >grant ...
最新文章
- msvc/gcc:中用#pragma指令关闭特定警告(warning)
- OpenCASCADE绘制测试线束:几何命令之近似值
- 厉害了!地大这位29岁博导,最大的爱好是研究火……
- python读取行、分割、存储_Pytables / Pandas:组合(读取?)按行分割的多个HDF5存储...
- linux三剑客应用到工作中,LINUX 三剑客老大(AWK) 日常工作总结(示例代码)
- echart保存图片的两种实现方式
- _RecordsetPtr
- delphi 连接DBF
- Android搜索关键字高亮显示
- tecplot360 2015 R1读abaqus后处理文件
- Python实现绘制函数图像——以Sigmoid函数为例
- 结构化数据与非结构化数据
- 图表点编辑数据无反应_word图表无法编辑数据 word图表不能编辑数据
- TextSymbol使用方法
- el-table合并单元格
- 我的世界怎么在服务器中显示键位,我的世界神奇宝贝mod怎么玩 基本键位介绍...
- 如何提高在搜索引擎中的排名-百度排名-竞价排名-自然排名
- 认证鉴权对于 API 网关的重要性
- 马尾辫子怎么画?做个背景杀手!教你画好辫子的神秘诀窍
- oracle人语句大全,oracle查询语句大全