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基础相关推荐

  1. 【面试宝典】软件测试工程师2021烫手精华版(第三章Mysql基础篇)

    第三章 Mysql 基础 一. 基础知识 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库 什么是关系型数据库,主键,外键,索引分别是什么? 关系型数据库是由多张能 ...

  2. 面试官都拜服的,软件测试面试题之Mysql基础!

    Mysql 基础知识点击领取学习资料 1. 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库 2. 什么是关系型数据库,主键,外键,索引分别是什么? 关系型数据库是 ...

  3. mysql基础之视图

    原文:mysql基础之视图 在查询中,我们经常把查询结果 当成临时表来看. View是什么? View可以看一张虚拟表. 是表通过某种运算得到的一个投影. 既然视图只是表的某种查询的投影,所以主要步骤 ...

  4. MySQL基础day03_数据的导入、导出-MySQL 5.6

    MySQL基础day03_数据的导入.导出-MySQL 5.6 注:把数据按照一定格式存放到文件里才能进行数据的导入. 1,数据导入的条件 把文件里的内容保存到数据的表里: 把数据按照一定格式存放文件 ...

  5. MySQL基础篇:子查询

    文章目录 概述 where型子查询 from型子查询 EXISTS型子查询 复制表子查询 概述 在某些情况下,当进行一个查询时,需要的条件或数据要用另一个select语句的结果,这个时候,就要用到** ...

  6. mysql 存储引擎 面试_搞定PHP面试 - MySQL基础知识点整理 - 存储引擎

    MySQL基础知识点整理 - 存储引擎 0. 查看 MySQL 支持的存储引擎 可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...

  7. mysql 基础篇(二) 账号、权限管理

    mysql 基础篇(二) 账号.权限管理.备份与还原 建立账号密码: Grant all on test.* to "cj"@"localhost" ident ...

  8. MySQL:基础—数据分组

    MySQL:基础-数据分组 1.为什么要分组: 比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量. 如果只找一个 ...

  9. linux mysql运维_Linux运维常用的 MySQL基础命令

    # MySQL基础命令 ------------- ### 创建MySQL库,授权. >create database mysqldb character set utf8; >grant ...

最新文章

  1. msvc/gcc:中用#pragma指令关闭特定警告(warning)
  2. OpenCASCADE绘制测试线束:几何命令之近似值
  3. 厉害了!地大这位29岁博导,最大的爱好是研究火……
  4. python读取行、分割、存储_Pytables / Pandas:组合(读取?)按行分割的多个HDF5存储...
  5. linux三剑客应用到工作中,LINUX 三剑客老大(AWK) 日常工作总结(示例代码)
  6. echart保存图片的两种实现方式
  7. _RecordsetPtr
  8. delphi 连接DBF
  9. Android搜索关键字高亮显示
  10. tecplot360 2015 R1读abaqus后处理文件
  11. Python实现绘制函数图像——以Sigmoid函数为例
  12. 结构化数据与非结构化数据
  13. 图表点编辑数据无反应_word图表无法编辑数据 word图表不能编辑数据
  14. TextSymbol使用方法
  15. el-table合并单元格
  16. 我的世界怎么在服务器中显示键位,我的世界神奇宝贝mod怎么玩 基本键位介绍...
  17. 如何提高在搜索引擎中的排名-百度排名-竞价排名-自然排名
  18. 认证鉴权对于 API 网关的重要性
  19. 马尾辫子怎么画?做个背景杀手!教你画好辫子的神秘诀窍
  20. oracle人语句大全,oracle查询语句大全

热门文章

  1. LinkedIn领英三方插件使用教程
  2. vasp可以做哪些计算及命令
  3. IIR数字滤波器设计---双线性变换法
  4. 掌财社:千亿市值“插座茅”被反垄断调查!高瓴、社保基金踩雷 公司火线回应
  5. Mirai QQ机器人(开源)
  6. logisim文件的使用
  7. SSH框架搭建整合详细步骤及运行流程
  8. postgresql系统架构图
  9. 用计算机怎么计算p级数,2020考研计算机数学49个基础知识点
  10. 传统bios安装linux分区,传统BIOS传统MBR分区,Clover硬盘安装基础教程