软件测试学习笔记

362 阅读35分钟

[top]

一.电脑配置

1.ping 网址

 作用:查看本电脑和目标电脑网络连接情况(1000ms = 1s)

2.查看本电脑的信息

  • cmd命令 打开:运行键+r,输入cmd,点确认或者enter
1.ipconfig -all
2.ipconfig  //查看电脑ip地址
  • 查看网线连接电脑的插口状态 物理地址.png

二.HTML

1.html基础语法

  • html:负责网页的架构( 超文本标记语言,不是编程语言 ,是标记语言 )

“超"指的是超链接,就是在一个网页网站里面点击一个内容,会弹出一个新的对应网址,比如在淘宝首页面点击鞋子,弹出的就是对应鞋子的网页,标记就是<语言>

2.新建一个html网页

  1、准备好一个写代码的文件夹
  2、鼠标左键拖拽到工具左侧--项目管理器中
  3、鼠标左键点击文件夹的名字(必须是绿色才行)
  4、鼠标右键--新建html文件
  5、在弹出的对话框中,改文件扩展名之前的名字,后缀名不能改(后缀名:描述当前文件类型)
  6、点击完成即可新建一个html文件
  • html骨架标签 (新建的时候默认生成的那些标签)
//写标签注意 **语义化**
1.meta 标签可以设置网页的字符集(utf-8  国际编码)
2.title 标签设置网页网站标题
3.body 标签设置网页网站主题内容部分
4.<br />  一个换行(回车)
5.&nbsp; 一个空格
6.h1到h6分六级  (依次减小效果,每个标题都是独占,每个标题都是独占一行空间)
7.P标签 (负责放文章段落)
8.b标签和 strong (加粗效果)
9.i和em标签 (实现倾斜的效果)
10.img标签 (图片标签) <img src="图片名字.gif"  />
11.s 和del  实现删除线的效果
12.a标签 (超链接标签) 可以跳转及下载 (可以打开静态资源及网络资源)
  • 代码注释
1. //  双斜杠代表单行注释
2. <!--xx--> (快捷键:ctrl+?生成)可以注释多行
  • img 用法
<img src="想要加载的图片名字" width="宽度" height="高度" title="鼠标悬停的提示文字" alt="未加载图片时候的提示文字;可以读给网页阅读器听" />
  • 超链接标签 用法
1.打开网络资源  <a href="http://www.baidu.com">点击我可以打开百度</a> 
2.打开静态资源 <a herf="02文章标题.heml">点击我可以打开本地的页面</a>
3.如果想在新窗口打开,需要添加target属性 <a href="http://www.baidu.com" target="_blank">点击我可以再新窗口打开百度</a>
4.空链接 #占位  <a href="#">点击我可以打开隔壁老王的页面</a>
  • 路径 用法(需要找到的资源位置)
1.相对路径 (相对于当前html文件去找其他资源的方式)
同级查找 <img src="资源名称.gif" alt=""/>
上级(上上级)查找 <img src="../(../)资源名.gif" alt=""/>
下级查找 <img src="文件名/资源名.gif" alt=""/>
2.绝对路径 (资源在电脑中的具体位置)
<img src="E:\软件测试\代码\新建文件夹\素能课程.jpg"/>
前端语法中,绝对路径不推荐写
  • 列表
1.无序列表 
<ul>
    <li>文字内容</li>
    <li>文字内容</li>
    <li>文字内容</li>
</ul>
2.有序列表
<ol>
     <li>文字内容</li>
     <li>文字内容</li>
     <li>文字内容</li>
</ol>
  • 布局
div:独占一行空间,称之为大盒子
<div>文字内容</div>
<div>文字内容</div>
<div>文字内容</div>
span:一行可以防止多个,称之为小盒子  
<span>文字内容</span>
<span>文字内容</span>
<span>文字内容</span>
  • 音频、视频
音频
<audio src="音频文件名.mp3" controls="controls"></audio>
视频
<video src="视频文件名.mp4" controls="controls"></video>
因历史遗留原因,导致音频视频标签兼容性很差,对于测试工作来讲,需要测试三大主流浏览器是否能正常运行
测试IE低版本:win7-IE7,win8-IE8,win9-IE9

3.表单标签

  • 表单基础 form标签(所有用户填写的表单数据)
action="xxx.jsp" 把表单数据提交给后台程序处理
method="post" 传递数据时候的方式方法,post代表隐式传递;get代表明文传递
<form action="xxx.py" method="get">


单选框:

用户名:<input type="text" /> 
密码框:<input type="password" />
type="radio" 单选框
checked="checked" 代表默认选中状态
测试细节:
1.点击查看是否为单选效果
2.刷新的时候是否有默认选中状态
3.点击文字是否可以进行切换
  • 多选框
type="checkbox"
checked=“checked” 默认选中
测试细节:
1.刷新的时候是否有默认选中的状态
2.点击文字的时候是否可以进行切换

  • 下拉菜单
<select name="">
<option value="">文字内容</option>
<option value="">文字内容</option>
<option value="">文字内容</option>
select="select" 下拉菜单默认选中
测试细节:
1.内容的顺序
2.默认选中的状态
3.内容的条数

  • 文本域
<textarea name="" rows="30" cols="20"></textarea>
测试细节:
1.测试三大主流浏览器外观大小是否一致
2.提醒程序员禁用拖拽大小的功能
  • 按钮
type="button" 普通按钮,需要js配合才能实现效果
value属性添加文字到按钮身上
type="reset"让表单数据恢复默认值
value属性添加文字到按钮身上
type="submit"让表单提交给指定后台处理
value属性添加文字到按钮身上
点击后无论是否报错都与测试五官,最终测试的时候,只要关注数据库中的内容是否正常添加即可

  • 表单用户体验细节
1.可以添加placeholder="请输入用户名"属性,给文本框设置提示文字
2.autofocus="autoocus" 给第一个输入框设置一个默认鼠标焦点的属性

三、css

1. css基础语法

style标签写在title标签后面
选择器{属性名1:属性值1;属性名2:属性值2;}
color 颜色
font-size 字号
px 像素单位(90%以上数字后面跟单位)
div{color: red;font-size: 100px;}
  • 调试工具
F12或者点击右键-检查
菜单中第一个选项:elements(元素、标签、标记)
用鼠标左键点击想要查看的标签,右侧就会出现对应的css代码
想设置的颜色:点击颜色前面的方框,使用掉色盘改变颜色后,把代码放在程序中

2.进阶语法

  • id选择器(写在大括号之前,用标签的名字进行页面元素、标签、标记的选择)
p{color:#edff05:}
id选择器(用html标签中的id属性来进行选取)
#id的值(xxx)(#用来匹配id的值)
<p id="d的值">xxx</p>
例
#p1{color:red;}
<p id="p1">文字内容</p>
  • id命名规则
1.不能数字开头
2.不能使用中划线、下划线之外的符号
3.不推荐中文
4.尽量做到见名知意
唯一性:
1.id命名不可以重复使用;再JS中会因为id的命名冲突而导致报错
2.每个标签只能有一组id
  • class类选择器
.类名{xx}
<p class="类名">xx</p>
  • css书写位置、引入方式
1.内嵌式:在style标签中,在title标签后面
2.外链式:使用link标签设置href属性,单独把css文件嵌入到html文件中
<link rel="stylesheet" type="text/css" href="我的css.css"/>
内嵌式用在电商网站首页,外链式用在除了电商网站首页的其他
行内式:写在标签身上,不推荐使用,修改不方便,重复代码太多,导致页面加载速度变慢
例:
<p style="color:red;">文字内容</p>
  • 鼠标伪类
p{color: red;}
p:hover{color: blue;}
  • 并列、并集选择器(一句话多个元素,用逗号连起来)
h1,div,span,p{color:red;}
  • 后代选择器(用空格选取后代元素)
div span{color: red;}

四、后端语言

1.语言发展史

1.机器语言、机器码(01):计算机底层能识别的
2.汇编语言:最接近机器码的语言,依然晦涩难懂,比其他高级语言运行速度快
3.高级语言:C、php、java、python、前端。。。

五、测试理论

1.测试分类

  • 按阶段分类
1、单元测试也叫模块测试,测试最小程序模块
2、集成测试又叫组装测试,通常在单元测试的基础上,单独的模块合在一起测试
3、系统测试,指的是将整个软件系统看为一个整体进行测试
  • 验收测试
α(alpha)测试:内测版本,开发者内部交流,或忠实粉丝之间发布,该版本bug比较多,普通用户最好不要安装
β(Beta)测试:公测版本,对所有用户者开放,免费发布,里面还会有一些bug的存在
γ(Gamm)测试:正式版的候选版本

  • 按是否查看源代码
1.黑盒测试:不关注代码,而是业务逻辑,输入内容和输出结果之间
2.白盒测试:去研究里面的源代码和程序结构
3.灰盒测试:就是结合黑盒测试和白盒测试的状态
  • 按是否运行分类
1.静态测试:不实际运行被测软件,只是静态地检查程序代码、界面或文档钟可能存在的错误过程
2.动态测试:是指实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程
  • 按照是否自动化
人工测试:也叫手工测试,测试人员手动去进行的测试
自动化测试:利用代码或者工具帮助人工进行测试
  • 测试策略
1.冒烟测试:对系统进行最基本功能的测试,保证基本功能和流程走通
2.回归测试:修复一个bug后,把之前的测试用例在新的代码下进行再次测试
3.随机测试:对被测软件的一些重要功能进行复测,也包括测试那些当前测试用例没有覆盖到的部分
4.探索测试:同时设计测试和执行测试,测试人员通过测试来不断学习被测系统

2. 软件缺陷

(软件或程序中存在的各种问题及错误;会导致软件产品在某种程度上不能满足用户的需求)

  • 判定标准:
1.软件未达到需求规格说明书钟标明的功能
2.软件出现了需求规格说明书指明不会出现错误的地方
3.软件的功能超出了需求规格说明书指明的范围
4.软件未达到需求规格说明书虽未指出但应该达到的目标
5.测试人员认为软件难以理解,不易使用,运行速度慢,或者最终用户体验不好

  • 产生的原因:(不可避免)
1.需求解释、记录或者定义错误
2.设计文档说明存在错误或者拼写错误
3.编码说明、程序代码有误
4.硬件或者软件系统上存在错误

  • 缺陷的类型
1.功能错误
2.界面错误
3.兼容性错误
4.易用性错误(用户体验提升问题)
5.改进建议


  • 测试原则
1.只能证明缺陷存在问题,不能证明不存在问题
2.不能进行穷尽(穷举)问题,应该分类别测试
3.测试工作要尽早进入,降低修复成本
4.缺陷存在集群现象,二八原则:20%的模块中存在80%的缺陷
5.测试依赖环境(系统、浏览器)
6.杀虫剂现象(交换测试)
7.不存在缺陷谬论

3.测试用例

测试用例:为特定的目的而设计的一组测试输入、执行条件和预期结果的文档。测什么?怎么测?
软件测试定义:人工和自动化手段来进行测试,目的找到预期结果和实际结果之间的差异
目的:用最少的人力、物力、财力,找到软件中的问题并修复,从而降低商业风险

七、JS(控制web前端的结构和样式)

<script type="text/javascript">
alert("文字内容")弹出对话框(英文双引号、单引号都可以)
</script>
语法规则:
事件源.事件类型=funtion(){时间发生时候要执行的命令}
document.getElementById('dw').onclick=function(){
alert('点我之后弹出的对话框')}

八、Linux系统

Linux命令: 软件测试第一个任务,一般都需要进行环境搭建,一部分环境搭建内容是在服务器上实现的,跟服务器交互(没有图形化页面),需要使用Linux命令 数据库: 所有软件在使用过程中所产生的数据,最终都要存在数据库当中,而测试工作往往要去校验数据的正确与否,因此需要学习数据库。

虚拟机系统常见操作 图片.png

输入密码解锁 图片.png

1.软件和硬件

硬件:能看得见摸得着
软件:看得见摸不着
关系:没有软件的硬件是没有任何意义的,只有存在软件的硬件才能为人所用

2.操作系统

作用:
1.是硬件设备上的第一层软件
2.有了操作系统可以方便我们调用所有硬件设备(?)
3.所有应用程序(QQ\微信)使用前提是需要具备操作系统

3. 操作系统常见分类

桌面操作系统
Windows
macOS
Linux
服务端操作系统
Linux
Windows Server
移动端操作系统
iOS
Android(基于Linux)
嵌入式操作系统
Linux(自动贩卖机\收银台)

4. Linux系统分类

市面上常见的Linux系统都有一个共同的名字:Linux发行版(在内核版的基础上额外增加一些应用软件和图形化页面) 图片.png

5.Linux系统特点

开源(源代码可见),免费
(注意:开源不意味着一定是免费,要看具体开源协议)
安全稳定
可移植性好(常见系统分类中都有Linux系统的存在)
高性能(服务端没有图形页面)

6.Linux系统的文件和目录

  • 特征
Linux系统中没有盘符概念
Linux系统中所有文件都存在根目录下(常用/代表)
  • 使用目录
/:根目录
/home:所有普通用户的家目录
/root:超级管理员下的家目录
/usr/bin:Linux命令大部分存在于该目录下

虚拟机常规操作

桌面打开主页面 图片.png

其他位置>计算机

图片.png

屏幕底部显示的/即为根目录

图片.png

7.Linux命令的基本格式

  • 格式组成
命令主体-命令选项 命令参数
常见命令形式:
1.命令主体
2.命令主体-命令选项
3.命令主体 参数
4.命令主体-命令选项 命令参数
特点:命令主体必须存在,而选项和参数是可选的
  • 查看命令帮助信息方法

方法一: 命令主体 --help:可以查看命令具备那些选项以及选项含义

图片.png

方法二: man 命令主体:查看命令的手册信息 默认情况下手册信息是英文,可以扩展为中文,实际应用中推荐方法一

图片.png

  • 命令学习方法说明
以ls为例:
ls:展示当前路径下有哪些文件
ls -a:显示当前路径下的所有文件,包含隐藏文件(以.开头的文件名)
ls -l:显示当前路径下文件的详细信息
ls -al:显示当前路径下文件的详细信息,包含隐藏文件
注意:
1.命令选项连用形式为:命令主体 选项1选项2
2.命令主体和选项之间必须包含一个空格
3.命令选项的作用一般是扩展命令主体功能的

ls命令效果截图

图片.png

image.png 虚拟机常规操作--显示隐藏文件

image.png

8.Linux命令的共通知识点

  • 通配符的使用
*:代表可以匹配任意长度名字的文件名
?:可以匹配单个字符,如果目标文件名有多个字符,该符号就可以使用多个
[]:括号内的内容表示一个范围,例[abc]代表匹配的文件名是a或b或c,等价于[a-c]

绝对路径和相对路径

绝对路径:路径源头固定不变,常见有两个:/根目录,~当前用户的家目录
相对路径:以当前所在路径为源头,常见的表现形式有两个:.表示当前路径下,..当前目录的上一层(负层级)
路径注意事项:
1.绝对路径使用时,要确定是在根目录下还是在当前用户的家目录下
2.初学时,建议所有路径都选用绝对路径,当清楚文件结构后,逐步转换相对路径
3.相对路径中,如果是当前路径下的文件获取操作,那么/一般是可以省略的

1635394479(1).png

9.文件和目录的常用命令

案例1:文件和目录操作的相关命令(重点)

1635394773(1).png

1635408113(1).png

1635408867(1).png

1635409118(1).png

1635409170(1).png

小结

pwd:查看当前所在的位置路径(当有cd命令切换路径时,确认路径时使用)
ls:查看当前路径下有哪些文件(对路径下的文件进行了修改、创建、复制、移动、删除时使用)
cd:切换路径(常和绝对路径和相对路径配合使用)
touch:创建文件名(单文件:touch 文件名;多文件:touch 文件名1 文件名2)
mkdir:创建目录文件(单文件夹:mkdir 文件夹1;多文件夹:mkdir 文件夹名1 文件夹名2)
cp:复制文件/文件夹(复制文件到文件夹中:cp -i 文件名 目标文件夹;复制文件夹到目标文件夹中:cp -r 源文件夹 目标文件夹)
mv:移动文件/文件夹(移动文件到文件夹中:mv  文件名 目标文件夹;复制文件夹到目标文件夹中:mv  源文件夹 目标文件夹)
mv:改名(mv 源文件名 新文件名)新名字必须是当前目录下不存在的文件名
rm:删除文件/文件夹(删除文件:rm 文件名 删除文件夹:rm -r 文件夹名)
rm:删除所有文件/文件夹(rm -r *)

案例3:查看日志文件信息命令

image.png

image.png

image.png

image.png

扩展1:ping命令的作用

image.png

扩展1

cd命令常用用法

image.png

  • 对文件内容的相关操作命令

image.png

效果图

image.png

image.png

image.png

1635412779(1).png

1635412941(1).png

1635412993(1).png

小结

clear:清空屏幕操作,快捷键:Ctrl+L
>:重向定向符,将左侧命令的结果输出到右侧的文件中(反复执行,文件原有内容会被替换)
>>:重向定向符,讲左侧命令的结果输出到右侧文件中(反复执行,内容追加,文件原有内容不会被替换)
cat:查看文件内容(cat 文件名),适合看文件内容较少的文件
more:以分屏的形式查看文件内容(more 文件名),适合查看文件内容较多的文件
|:将左侧命令结果传递到右侧命令当数据源
例如:ls -al/usr/bin grep mysql(从左侧命令结果中查找mysql,管道符命令多用grep和more)
  • 查看日志文件信息命令
head:可以查看文件开头内容(head 文件名)
查看前十行内容(head -10 文件名)
tail:可以查看问价结尾内容(tail 文件名)
查看后十行内容(tail -10 文件名)
tail -f:动态查看日志文件内容(tail -f 日志文件名)
系统日志文件存放位置:/var/log
  • 重启、关机、查看系统信息
reboot:重启
shutdown -h now:关机
cat/proc/version:查看内核版系统信息
cat/etc/redhat:查看发行版系统信息
  • 程序和进程操作相关命令
pa -aux|grep 程序名:能够或许目标程序的进程IdId是随机数字,具有唯一性)
kill -9 进程ID:通过进程ID关闭对应程序(-9 强制关闭)
拓展内容:
top:可以调用Linux系统下的“任务管理器”,可以动态查看所有的进程信息
  • 端口号信息的获取及操作命令小结
netstat -anptu:可以获取当前系统网络相关信息(获取端口号信息)
lsof -i:端口号:查看占用某一端口号的程序名及ID进程(需要root权限)
注意:
可以通过(kill -9 进程ID)命令完成对端口占用程序的移除
  • 文件权限修改命令
字母法:
1.组别代表字母:u(拥有者者),g(用户组),o(其他人),a(以上所有)
2.赋权代表符号:+(增加),-(撤销),=(赋予)
3.权限代表字母:r(读取),w(可写),x(可执行)
例:
chmod a=rwx demo 或 chmod u-r,g-w,o=x demo

数字法:
1.权限对应的数字:r=4,w=2,x=1,-=0
2.分别累加每一个组别的权限之和,再设置权限即可
例:
chmod 755 demo或chmod 775 demo
文件权限修改注意事项:
1.权限修改可以反复执行,如果未达到目的,可以再次修改
2.用数字发或者字母法修改看个人喜好
  • 系统操作相关命令
which 程序名:可以查看程序安装位置
su - 用户名:切换至用户
su - :切换至root用户
切换哪个用户,输入对应用户密码,密码没有提示
who -u:查看用户登录信息
exit:退出终端窗口(退出用户)
  • 查找文件命令
find 路径 -name '目标文件名':在给出的路径下查找目标文件
注意:
1.路径处可以使用绝对路径和相对路径
2.目标文件名处可以使用通配符(*?[])
    
  • 链接文件命令
In -s 源文件或文件夹 链接文件名:给源文件或文件夹创建链接文件
(链接文件等价于Windows系统的快捷方式)
注意:
1.源文件或者文件夹最好给绝对路径(防止链接文件被移动位置后失效)
2.源文件或者文件夹被删除,链接文件会失效
扩展内容:
In 源文件或文件夹 链接文件名:硬链接
  • 文件压缩和解压命令
tar 和 gzip
打包和压缩:tar -zcvf 压缩包名.tar.gz 目标文件名或文件夹
解包和解压:tar -zxvf 压缩包名.tar.gz
扩展内容:
指定解压位置:tar -zxvf 压缩包名.tar.gz 目标文件名或文件夹 -c 解压位置文件夹
tar 和bzip2
打包和压缩:tar -jcvf 压缩包名.tar.bz2 目标文件名或文件夹
解包和解压:tar -jxvf 压缩包名.tar.bz2
扩展内容:
指定解压位置:tar -jxvf 压缩包名.tar.bz2 目标文件名或文件夹 -c 解压位置文件夹
选项含义:
-z:gzip(压缩/解压)
-j:bzip2(压缩/解压)
-c:打包
-x:解包
-v:显示过程
-f:指向文件
zip和unzip
压缩:zip -r 压缩包名 目标文件名或文件夹
解压:unzip -d 解压位置文件夹 压缩包名
  • vi编辑器的使用
切换centOS系统的命令行模式和图形化模式:
命令行模式:ctrl+alt+f2或ctrl+alt+Fn+F2
图形化模式:ctrl+alt+F1或ctrl+alt+Fn+F1
注意:
1.如果鼠标丢失,需要让虚拟机软件释放鼠标,快捷键:ctrl+alt
2.切换到命令行模式时,需要先登录系统,根据提示一次输入用户和密码即可
使用步骤:
1.vi文件名:如果文件存在,则打开文件;如果文件不存在,则新建文件(命令模式)
2.按字母i键:从命令模式切换至插入模式
3.正常编辑文件内容
4.按下esc键:从插入模式切换至末行模式
5.输入:,后跟wq,再按一个回车:保存文件内容并退出
说明:
w(写入),q(退出),!(强制退出),!q(强制退出不保存)
注意:vi工具只要求能够实现对文件内容就行修改并报错操作即可

九、数据库

1.概念

定义:存储数据的软件
特点:表是数据存储的核心体现

2.分类

  • 关系型数据库(表与表之间有关联):RDMS
特征:以数据表的形式存储数据,便于查询
常见的数据库代表:
Oracle:在大型项目中使用,例如银行、电信等,收费
MySQL:项目中使用比较广泛,社区版免费
Microsoft SQL Severs:微软项目中使用
SQL ite:轻量级数据库,主要应用移动平台
核心要素:
数据行(一条记录)
数据列(字段)
数据表(数据行的集合)
数据库(数据表的集合)
一个数据库中可以有n个数据表
  • 非关系型数据库
不以数据表形式存储数据的数据库类型

2.SQL介绍

定义:对数据库进行查询的一门机器语言
特点:所有主流关系型数据库都支持SQL语句进行数据进行查询
虽然SQL分支语言很多,但是对于测试人员,重点掌握查询操作即可
DQL:数据查询语言,用于对数据 进行查询,例如:select
在MYSQL当中,默认对SQL语言不区分大小写
    

3.MySQL介绍

来源:目前属于Oracle旗下产品
特点:开源、支持多平台(Linux/windows/MacOS),支持多语言(Java/C/Python)

4.数据库的远程连接

注意:实际工作中,数据库是安装在服务器中的,如果直连数据库进行校验,就必须远程连接
连接步骤:
1.获取两个信息:服务器的IP地址,数据库的账号和密码(找相关人员要)
2.在自己电脑上用数据库工具(例如:Navicat)建立连接,远程连接数据库
3.连接过程中需要确认自己电脑和服务器是否能够正常通信(不行的话用ping 命令)
注意:
MY SQL默认的账户密码是root 123456,和centerOS系统中的root用户没有关系
如果第一次连接成功,再次使用时,提示IP地址问题,则需要重新获取虚拟机的IP地址
使用过程中,要确保虚拟机系统不会待机或进入休眠状态,需要修改:
打开centerOS系统--打开电源--点击设置--点击power--选择白屏幕休眠(从不)

5.Navicat基本使用

  • 数据库连接操作 常规操作

微信图片_20211017200718.png

  • 数据库操作

新建数据库

微信图片_20211017200718.png 1.png 2.png

  • 编辑数据库

3.png

  • 数据表操作

4.png 修改字段 5.png 再次添加或修改字段 6.png 添加修改字段注意事项 7.png

  • 数据操作 打开表 8.png 数据修改注意事项 10.png

9.png

  • 清空表(清空数据保留字段)

11.png

数据库的备份与还原

测试过程中会产生垃圾数据,测试结束是一般需要还原原有数据,因此需在测试之前先备份,测试结束后还原
  • 备份操作

12.png

  • 还原操作 新建一个与备份数据库设置相同的数据库 13.png 14.png 15.png

6.数据类型与约束

  • 数据类型
整数:int(有符号范围:-2147483648~2147483648,无符号范围:0~4284867295)
小数:decimal(例如:decimal(52)表示一共5位数,小数点有2位,整数就是3位数)
字符串:varchar(范围:0~65533,例如:varchar(3)表示最多存3个字符,一个中文或一个字母都占一个字符)
日期时间:datetime(范围:1000-01-01 000000~9999-12-31 235959 
例如:2020-02-02 122959')
  • 数据约束
主键(primary key):物理上存储的顺序
非空(not null):次字段不允许留空
惟一(unique):次字段的值不允许重复
默认值(default):当不填写此值时会使用默认值,如果填写时以填写的为准
外键(foreign key):维护两个表之间的关联关系

主键设置 1.png

主键的特点

2.png

非空设置

3.png

惟一设置

步骤1:索引

图片.png

步骤2:字段>选择目标字段

图片.png

步骤3:索引类型>UNIQUE

图片.png

默认值设置

图片.png

7.SQL语句

  • 创建数据表
-- 创表语句

-- 需求0: 创建商品表, 包含商品名称和价格

-- create table 表名(

-- 字段1 类型,

-- 字段2 类型

-- );

-- 优化

drop table if exists goods;

-- drop table : 删表 if exists : 如果存在
-- 如果表存在, 执行删除操作

create table goods(

goodsName varchar(20),

price decimal(4, 2)

);

表已存在提示

图片.png

需求1: 创建商品表

-- 需求1: 创建商品表, 字段包括 id(主键), 商品名称, 价格, 数

量, 公司,备注, 并添加商品

drop table if exists goods;

create table goods(

-- unsigned : 无符号

-- primary key : 主键(不为空)

-- auto_increment : 自动递增

-- 直接替换字段名使用皆可
id int unsigned primary key auto_increment,

goodsName varchar(20),

price decimal(6,2),

num int,

company varchar(20),

remark varchar(30)

);
  • 增加数据(插入数据)
需求1:添加商品
(查询一次,方便观察表中字段)
select * from goods
添加1条数据
(主键列是自动增长,插入时需要占位,通常使用0或者default或者null来占位,插入成功后以实际数据为准)
语法:insert into 表明 values(...)
例如:
insert into goods values(
0,'战神笔记本',6000.00,100,'某东','战神在手,天下我有!');
插入多条数据
insert into goods values
(0,'小新笔记本'5000.00100'某东''这里是备注内容'),
(0,'戴尔笔记本'4000.00100'某宝''这里是备注内容'),
(0,'华为笔记本'7000.00100'某宝''这里是备注内容');
注意:插入多条数据时,每条数据使用,隔开,最后再用;
需求2:修改商品数据
一样还是先查询所有数据,便于观察数据内容
select from goods
补充一条惠普电脑的数据内容
update goods set price=4500.00,num=50,company='拼多多' where id=4
  • 删除数据
先查询所有数据
select * from goods;
语法格式:delete from 表明 where 条件
例:
delete from goods where id=4
-- 扩展1: 
逻辑删除(了解) -- 对于一些重要数据(例如: 商品数据只是库存为零, 不能删除商品 数据),不能直接删除, 此时使用逻辑删除 -- 逻辑删除:通过特定字段值来标记该数据为删除状态而已 -- 实现步骤: 1) 增加特定字段(数据值1为未删除0为删除) 2) 对 于要进行逻辑删除的数据,该字段赋值为0即可 -- 增加字段: alter table 表名 add 字段名 类型; -- 增加标记字段 alter table goods add isdelete int; -- 更新表内所有数据该字段的值 update goods set isdelete = 1; -- 标记目标数据为是删除状态(修改该字段值为0) update goods set isdelete = 0 where id = 2; -- 查询未删除的数据 select * from goods where isdelete = 1;
-- 扩展2: 
3种删除数据方法(所有数据) -- delete from 表名 : 清空表数据(只清空数据,保留结构), 但 不会重置主键计数 -- truncate table 表名 : 清空表数据(只清空数据,保留结构), 并会重置主键计数(截断表) -- drop table 表名 : 删除表, 包括表结构和数据 delete from goods; truncate table goods; drop table goods; -- 删除速度 : drop > truncate > delete

8.SQL语句-查询操作(要记的内容)

  • 查询所有/查询指定字段/起别名/去重
查询所有数据
select * from goods;
查询部分字段
select goodsName,price from goods
起别名
select goodsName as '商品名称',price as'价格' from goods;
(熟练之后as可以去掉,字段名的双引号也可以去掉)
去重
select distinct(company) from goods;
  • 条件查询

比较运算符/逻辑运算符

查询价格等于30并且出自并夕夕的所有商品信息
select * from goods;
select * from goods where price=30 and company='并夕夕';
比较运算符:
大于:>
小于:<
大于等于:>=
小于等于:<=
等于:=
不等于:!=或<>
逻辑运算符:
and:并列满足,既满足A,也满足B
or:满足A或者满足B
not:
  • 模糊查询
查询全部一次性口罩的商品信息
语句格式:where 字段 like '%信息'
(%可以匹配任意多个字符)
select * from goods where remark like '%一次性口罩'
'%一次性口罩'(以一次性口罩结尾,前面内容数字不限制)
如果一次性口罩出现在中间部分,则要改成
select * from goods where remark like '%一次性口罩%'
扩展:查询公司来源是 x宝 的商品信息内容
select * from goods where company like '_宝''_宝'(_可以匹配任意的单个字符)
  • 范围查询
查询所有价格在30-100的商品信息
select * from goods where price between 30 and 100;
between 起始值 and 结束值:表示一 个连续的范围,范围应该从小到大
扩展:查询出自于 某东 和 x宝 商品信息的以下数据
select * from goods where company in ('某东','x宝');
in'条件1','条件2'):表示不连续范围
  • 空判断
查询没有描述(remark)信息的商品信息
select * from goods where remark is null;
is null:判断空,与''不同,''代表空字符(空格/制表符(tab))
查询以下数据中描述信息不为空的所有商品数据
select * from goods where remake is not null;

  • 排序
查询所有商品信息, 按照价格从大到小排序, 价格相同时, 按照数量少到多排序
select * from goods order by price desc,count asc;
order by(排序)
语句格式:
order by 字段名 asc/basc;
asc:升序,默认是升序排序,可省略
例:
select * from goods order by price desc,count ;
basc:降序
  • 聚合函数
查询以下信息: 商品信息总条数;   
select count(*) from goods;
统计数据总数时,推荐使用*,按照数据最多的一列统计总数
最高商品价格;
select max(price) from goods;
max:最大值
最低商品价格;
select min(price) from goods;
min:最小值
商品平均价格;
select avg(price) from goods;
avg:平均值
一次性口罩的总数量
先查询所有一次性口罩信息:
select * from goods where remark like '%一次性口罩%'; 
select sum(count) from goods where remark like '%一次性口罩%';
sum:求和
  • 分组
查询每家公司的商品信息数量
select company 公司名称,conut(*) from goods group by company;
group by:分组,可以根据给出的字段数据进行数据分组
语句:group by 字段
分组后再进行条件筛选
查询某东和x宝最贵商品的价格
(把其他不用查询的字段排除掉:‘并夕夕’)
select company 公司名称 from goods group by company having company !='并夕夕';
获取公司商品最贵价格:
select company 公司名称, max(price) from goods group by company having company!='并夕夕'; 
  • 分页查询
查询当前表当中第5-10行的所有数据
select * from goods limit 46;
语句:
limit 起始索引,数据行数
计算机当中,起始值是0开始,所以第5行是45-10行一共有6行
扩展:如果只是获取第一行的数据,起始值可以省略
例:
select * from goods limit 1

9.连接查询

  • 内连接
查询所有存在商品分类的商品信息
(先查询所有商品)
select * from goods;
select * from category;
select * goods inner join category on goods.typeId=category typeId
语句:
inner join 表2 on 表1.字段=表2.字段
内连接:显示两张表中存在对应关系的数据,无对应关系的数据不显示

  • 连接查询共通知识点
对连接后的表进行字段显示限制
select goods.goodsNmae,category.cateName from goods inner join category on goods.typeId=category.typeId;
注意: 需要由对应的 表名.字段 的方式实现(防止表与表之间存在相同的字段名)
表名.* : 代表显示该表的所有字段
select goods.*,category.cateName from 连接查询中, 往往会给表名起别名, 目的: 1) 缩短表名 2) 给

表单独创建空间(了解)oods inner join category on goods.typeId=category.typeId;
连接查询中, 往往会给表名起别名, 目的: 1) 缩短表名 2) 给表单独创建空间(了解)
select go.goodsName,ca.cateName from go inner join ca on go.typeId=ca.typeId;

  • 左连接
*查询所有商品信息,包含商品分类*
(先查询所有商品)
select * from goods;
select * from category;
select * from goods go left join category ca on go.typeId=ca.typeId;
语句:
表1 left join 表2 on 表1.字段=表2.字段
-- 左连接 : 以 left join 关键为界, 关键字左侧的表的信息要全
部显示出来, 而关键字右侧表的信息, 有对应的部分显示, 无对应的
部分以 null 占位填充即可
*查询所有商品分类及其对应的商品信息*
select * from category ca left join goods go on ca.typeId=go.typeId;
  • 右连接
*查询所有商品信息,包含商品分类*
(先查询所有商品)
select * from goods;
select * from category;
select * from category ca right join goods go on ca.typeId=go.typeId;
语句:
表1 right join 表2 on 表1.字段=表2.字段
右连接主要解决 3 张及以上表进行连接查询时常见,以 right join 关键为界, 关键字右侧的表的信息要全部显示出来, 而关键字左侧表的信息, 有对应的部分显示, 无对应的部分以 null 占位填充即可
*查询所有商品分类及其对应的商品的信息*
select * from goods go right join category ca on go.typeId=ca.typeId;
  • 左连接和右连接小结

图片.png

  • 连接查询的实质
*显示所有价格低于 120 的商品信息, 包含其对应商品分类*
select * from goods;
select * from category;
select * from goods go inner join category ca on go.typeId=ca.typeId where go.price<120;
内连接 : 如果有商品没有分类对应信息, 不会被显示出来,因此使用内连接,会造成数据缺失,查询结果错误
select * from goods go left join category ca on go.typeId=ca.typeId where go.grice<120;
左连接:左表数据都有显示,没有分类对应信息也会被显示出来,就不会造成数据缺失
  • 自关联
特征 : 只有 1 张表, 表中最少存在两列字段具备对应关系;
原理 : 通过起别名的方式, 将 1 张表变为 2 张表, 通过对应字段 的对应关系, 进行条件比对, 实现连接查询

图片.png

*查询河南省所有的市*
先查询所有数据
select * from areas;
select * from areas a1 inner join areas a2 on a1.aid=a2.pid where a1.atitle='河南省';
自关联 : 
-- 1) 通过起别名的方式, 将一表变俩表
-- 2) 通过 表1.字段 = 表2.字段 实现表间关联
*查询河南省的所有的市和区*
先查询所有数据
select * from areas;
select * from areas a1 inner join areas a2 on a1.aid=a2.pid left(inner) join areas a3 on a2.aid=a3.pid where a1.atitle = '河南省';
  • 子查询
定义 : 在一条查询语句当中, 利用另一条语句作为条件或数据源, 充 当条件或数据源的语句称之为子查询语句. 
注意 : 子查询语句在使用时, 务必使用括号括起来
  • 子查询-充当条件
*查询价格高于平均价的商品信息*
查询所有数据
select * from goods;
查询平均价格
select avg(price)from goods;(平均价格=68.33)
一步到位:
select * from goods where price > (select avg(price)from goods);
子查询 : 在 where 关键字后边的子查询语句是充当条件的
  • 子查询-充当数据源
*查询所有来自并夕夕的商品信息, 包含商品分类*
查询所有数据
select * from goods;
select * from category; 
并夕夕商品信息
select * from goods where company = '并夕夕';
一步到位:
select * from category ca inner join (select * from goods where company ='并夕夕') a on ca.typeId=a.typeId;
子查询 : 在 from 和连接查询关键字后边的子查询 语句时充当数据源的 
  • 子查询的分类
根据子查询语句返回的结果形式体现, 子查询共分为 4 类: 
子查询返回的结果是一个值(一行一列), 称之为: 标量子查询 
子查询返回的结果是一列数据(一列多行), 称之为: 列子查询 
子查询返回的结果是一行数据(一行多列), 称之为: 行子查询 
子查询返回的结果是多行多列(相当于一张表), 称之为: 表级子查询
  • 子查询的关键字
in:在一个范围之间
some/any:满足范围之间的任意一个值
all:满足范围之间的所有(= all : 等于所有; != 或 <> all : 不等于所有)
*查询在25-100之间的商品的价格*
select * from goods where price between 25 and 100;
select * from goods where price in (select * from goods where price between 25 and 100);
select * from goods where price = some(select * from goods where price between 25 and 100);
select * from goods where price = any (select * from goods where price between 25 and 100);
select * from goods where price = all (select * from goods where price between 25 and 100);
select * from goods where price != all (select * from goods where price between 25 and 100);
select * from goods where price <> all (select * from goods where price between 25 and 100);

10.MySQL高级功能应用

  • 数据库设计 ER模型
定义:E代表实体(数据表),R代表联系(数据表对应的字段)

图片.png

关系常见分类

一对一
一对多
多对多
  • 外键
如果一个实体的某个字段指向另一个实体的主键,就称为外键。 
被指向的实体,称之为主实体(主表),也叫父实体(父表)。
负责指向的实体,称之为从实体(从表),也叫子实体(子表)
作用: 对关系字段进行约束,当为从表中的关系字段填写值时,会到关 联的主表中查询此值是否存在,如果存在则填 写成功,如果不存在则填写失败并报错
-- 主表 
drop table if exists class; create table class( id int unsigned primary key auto_increment, name varchar(10) );
-- 从表 
drop table if exists stu; create table stu( name varchar(10), class_id int unsigned,foreign key(class_id) references class(id));
-- stu 表的 class_id 指向 class 表的 id, class_id 是 stu 表的外键 -- foreign key(自己的字段名) references 目标表名(目标表的 主键)
  • 对应存在表添加外键
*对于已经存在的表添加外键*
alter table stu add foreign key (class_id)  references class(id);
语句:
alter table 从表名 add foreign key (从表字段) references 主表名(主表主键); 
  • 查看和删除外键
*查看外键和删除外键*
查看外键
show create table stu;
语句:
show create table 表名
删除外键
alter table stu drop foreign key stu_ibfk_1;
语句:
alter table stu drop foreign key 外键名称;
  • 利用 Navicat 查看外键

图片.png

图片.png

结论 : 由于设置外键会极大降低对数据修改效率, 因此在实际工作中 遇到使用外键的几率比较低

  • 索引
定义: 类似于图书中的目录, 能够起到快速检索数据的作用
作用: 对于大量数据进行查询效率优化时, 可以采取添加索引的策略
*索引应用检验案例*
开启时间监测
set profiling=1;
查询示例数据 num = 10000 的值
select * from test_index where num = 10000;
查看运行时间
show profiles;
添加索引
create index num_index on test_index(num);
语句:
create index 索引名称 on 表名(目标字段)
再次执行查询数据操作
select * from test_index where num = 10000;
再次查看运行时间
show profiles;

图片.png

  • 查看索引
show index from test_index;
语句:
show index from 表名

图片.png

  • 创表时添加
create table create_index( id int primary key, name varchar(10) unique, age int, key(age) ); 
unique : 设置端唯一值
key(age):指定添加索引方法 )
查看索引 
show index from create_index
  • 删除索引
drop index age on create_index;
语句:
drop index 索引名称 on 表名;

图片.png

结论 : 索引在使用的时候能提高查询效率, 但是在进行插入/更新/删除时, 索引会造成障碍, 因此需要在执行插入等操作前, 先移除索引, 操作结束后, 重新添加索引即可
  • 命令行中操作 MySQL 登录MySQL
mysql -u数据库用户名 -p数据库密码
例如:
mysql -uroot -p123456

图片.png

  • 数据库操作
查看所有数据库 : show databases;
使用数据库 : use 数据库名称;
查看当前使用的数据库 : select database();
创建数据库 : create database 数据库名称 charset=utf8;
删除数据库 : drop database 数据库名称;

查看所有数据库

图片.png

使用数据库

图片.png

查看当前使用的数据库名称

图片.png

创建数据库

图片.png

删除数据库

图片.png

  • 数据表操作
查看数据库中的所有数据表 : show tables;
查看表结构 : desc 表名;
查看创表语句 : show create table 表名;

查看所有数据表

图片.png

查看表字段信息

图片.png

查看创表语句