前言
在我们讲解SpringBootWeb基础知识(请求响应案例)的时候,我们讲到在web开发中,为了应用程序职责单一,方便维护,我们一般将web应用程序分为三层,即:Controller、Service、Dao 。
之前我们的案例中,是这样子的请求流程:浏览器发起请求,先请求Controller;Controller接收到请求之后,调用Service进行业务逻辑处理;Service再调用Dao,Dao再解析user.xml中所存储的数据。
xml文件中可以存储数据,但是在企业项目开发中不会使用xml文件存储数据,因为不便管理维护,操作难度大。 在真实的企业开发中呢,都会采用专业的数据库来存储和管理数据,那此时,web开发调用流程图如下所示:
首先来了解一下什么是数据库。
- 数据库:英文为 DataB****ase ,简称DB,它是存储和管理数据的仓库。
像我们经常访问到的一些Web网站,比如像京东、淘宝、天猫这一类的电商网站,以及像OA、ERP、CRM这类的企业内部的管理系统,还有像银行、证券、医院、政府单位的一些系统,以及大家每天都会刷的APP比如今日头条、抖音类的app,那这些大家所看到这些应用软件当中呈现出来的这些数据,并不是在页面写死的,这些数据其实都是存储在数据库中的。最终这些数据,只是在浏览器或app中展示出来而已,最终数据的存储和管理都是数据库负责的。前端程序仅仅负责将数据以好看的样式呈现出来。
数据是存储在数据库中的,数据库它仅仅是一个存储和管理数据的仓库,那我们要如何来操作数据库以及数据库中所存放的数据呢?
那这里呢,会涉及到一个软件,我们可以通过一个软件去操作,这个软件有一个术语叫做:
- 数据库管理系统(DataB****ase M****anagement S****ystem ,简称DBMS)
- DBMS是操作和管理数据库的大型软件,将来我们只需要操作这个软件,就可以通过这个软件来操纵和管理数据库了。
此时又出现一个问题:DBMS这个软件怎么知道要操作的是哪个数据库当中的哪一条数据呢?到底是对这个数据做更新(修改)、查询还是删除呢?
- 此时我们就需要告诉这个软件,我们要执行的是什么样的操作,要对哪一条数据进行操作,我需要给这个软件发送一条指令,而这个指令,就是SQL语句。
- 需要给DBMS软件发送一条指令,告诉这个软件我们要执行的是什么样的操作,要对哪个数据进行操作。而这个指令就是SQL语句
- SQL(S****tructured Q****uery L****anguage ,简称SQL):结构化查询语言,它是操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准。
- 我们学习数据库开发,最为重要的就是学习SQL语句 。
- 关系型数据库:我们后面会详细讲解,现在大家只需要知道我们学习的数据库属于关系型数据库即可。
- 也就是说,我们通过SQL这门标准的语言,就可以操作数据库当中的数据了。
- 我们需要操作数据库当中的数据,我们只需要给数据库管理系统去发送对应的SQL语句,由数据库管理系统再来操作数据库当中的数据。
一. 数据库的基本概念
- 数据库的英文单词:DataBase 简称:DB
- 什么是数据库? 数据库是按照数据结构来组织、存储和管理数据的仓库。
- 数据库最重要的功能就是存储数据!
- 数据库的特点:
- 持久化存储数据的。其实数据库本质上就是一个文件系统
- 方便存储和管理数据
- 使用了统一的方式操作数据库 - - - SQL
- 学习了Java IO流,我们可以把数据保存到文件中。
- 之前我们可以把数据存储到内存里面,也可以把数据存储到文件里面,但是存储到内存里面的数据,它只是一些临时性的数据,当计算机一关机或者一断电的时候,再次开机的时候数据就没有了。
- 如果我们把数据存储到文件里面,数据可以做一些持久化的保存,当计算机再次关机,再次打开的时候,它还是在里面的。
- 数据库它是持久化存储数据的,那就意味着它一定是将数据存储在文件里面的,还是以文件的方式存在服务器的电脑上的,那么存储到文件里面呢,可以得出一个结论:其实数据库就是一个文件系统。
- 那么我们把数据存储在数据库的文件里面和存储在这种普通的文件里面有什么区别呢? 比如说我把数据存到一个txt的文本文件里面,和存到数据库文件里面有什么区别呢?
- 数据库可以方便管理数据,并且使用了统一的方式操作数据库 - - -SQL
- 所有的关系型数据库都可以使用通用的SQL语句进行管理 DBMS DataBase Management System
4. 常见的数据库软件
- 数据库和数据库软件它是个什么关系呢?
- 数据库其实就是一个基本的概念,一个概念,而数据库软件是对这个概念的具体的一些实现,那么实现的方式有很多种,再换句话说,有各个公司对它们做出了不一样的实现,它们就生成了不同的产品。
- 举个例子,比如你想去买一辆汽车,那么汽车它只是一个概念,那么你要买哪一个品牌的哪一个型号的汽车才是真正的这个汽车的产品。
常见数据库排行榜
- 右上角有一栏Score,叫做分数,这个得分越高,就代表这个数据库的市场占有率越高,排名也就越靠前。
到目前为止排行榜前十的关系型数据库
- Oracle:收费的大型数据库,Oracle 公司的产品。它是根据当前这个数据库所使用的人数以及部署的机器节点的个数来收费的,一年大概花费30多w人民币,还是非常贵的,特别是一些中小型的公司,其实是负担不起这个费用的。
提问:那什么样的项目才会选择Oracle这样的数据库呢?
- 一般来说像银行的,证券的,政府的,医院的,电信的这一类的项目可能会选择Oracle这样的数据库。
- 而这些企业我们会发现都有一个共同的特点:不差钱!!!
- 对于一些中小型企业以及互联网公司来说,他们更倾向于选择排名第二的MySQL数据库。
- MySQL: 开源免费的数据库,中小型的数据库,因此深受中小型公司的喜爱,已经被 Oracle 收购了。MySQL6.x 版本也开始收费。MySQL数据库一开始是MySQL公司的,后来在08年被Sun公司收购了(Sun公司收购了 MySQL),再后来在09年又被Oracle公司收购了,因为Sun公司在09年的时候被Oracle公司收购了。
- 所以MySQL数据库现在也是Oracle公司的产品。
- Oracle收购了Sun公司之后,推出了两个版本的MySQL,一个是社区版是开源免费的,另外一个是商业版本,商业版本是要收费的。
- Oracle数据库和MySQL数据库也是我们Java语言用的最为多的两款数据库产品。
- 所有这些数据库只有作为商业运作才需要花钱,当然我们学习的时候肯定是不花钱的。
- 开源的意思就是开放了源代码,免费的意思就是不要钱。
- SQL Server :SQL Server数据库是微软公司的一款数据库产品,是一款 MicroSoft 微软 公司收费的中型的关系型数据库。 C# 、 .net 等语言常使用。SQLServer它也要钱,一般三万多块钱,跟Oracle比起来,它要便宜很多,当然性能上也是有差距的。
- DB2 :IBM 公司的数据库产品,大型的关系型数据库,在Java语言里边它也会被经常的使用 到,它也是收费的。常应用在银行系统中
- SQLite: 嵌入式的小型数据库,应用在手机端,如:Android。SQLite它被嵌入到这个安卓系统里面去了,应用在好多手机浏览器里面。
那这么多数据库,我们全部都需要学习吗,其实并不用,我们只需要学习其中的一个就可以了,我们此次课程中学习的数据库是现在互联网公司开发使用最为流行的MySQL数据库。
此时大家可能会有一个疑问,我们现在学习的是Mysql数据库,我们以后去公司做开发,如果用到的是Oracle数据库或SQL Server数据库该怎么办?其实大家完全不用担心这个问题,因为这些数据库都是属于关系型数据库,要操作关系型数据库都是通过 SQL语句来实现的,而SQL语句又是操作关系型数据库的统一标准。
结论:只要我们学会了SQL语句,就可以通过SQL语句来操作Mysql,也可以通过SQL语句来操作Oracle或SQL Server
以上这类数据库都是属于关系型数据库,要操作这一类型的关系型数据库都是通过SQL语句来操作的,而SQL语句又是操作关系型数据库的统一标准。
也就是说,只要我们学会了SQL语句,我们可以通过这个SQL语句来操作MySQL,也可以通过这个SQL语句来操作Oracle等都是可以的。所以对于我们来说,我们只需要学习众多数据库当中的一种就可以了,因为它们的操作语言都是统一的。
学习数据库开发,最为重要的就是学习SQL语句 。
课程内容安排:
我们要学习MySQL数据库,首先就得安装MySQL数据库,并了解MySQL数据库当中的一些体系结构,数据模型。这是我们第一章节MySQL概述所讲解的内容。
第二章节第三章节第四章节就是我们数据库当中最核心的内容:SQL语句,包括通过SQL语句来完成数据库的设计以及数据库当中数据的操作。
第五章节要来讲解数据库当中的多表设计,以及数据库当中的事务,以及多表查询的操作。
那最后一个方面,我们要来讲解数据库优化最重要的一个手段:索引。
以上课程内容拆解为3部分知识点:
可以将课程内容分为三个部分:数据库的设计、数据库的操作以及数据库的优化。
后面的阶段会讲解数据库的优化以及分库分表等内容。
第一章MySQL概述主要讲解MySQL的安装以及内部的数据模型
第二个方面和第三个方面就要来讲解SQL语句当中的DDL语句以及DML语句,这是SQL语句当中的两种分类,分别用来设计数据库以及操作数据库当中的数据。
首先先来安装并配置一下MySQL数据库,然后再来讲解MySQL当中的数据模型,最后一个方面详细讲解一下SQL语句以及SQL语句的分类。
1. MySQL概述
一. 安装
1.1.1 版本
MySQL官方提供了两个版本:
-
商业版本(MySQL Enterprise Edition)
- 该版本是收费的,我们可以使用30天。 官方会提供对应的技术支持。
-
社区版本(MySQL Community Server)
- 该版本是免费的,但是MySQL不会提供任何的技术支持。
1.1.2 安装
官网下载地址:MySQL :: Download MySQL Community Server (Archived Versions)
- 进去之后点击上面的download,再点击下面的MySQL社区版下载!!!
- 要下载的是免安装版!!!免安装版指的是不需要点下一步下一步,直接配置环境变量就可 以使用了!!!
- 选择Windows版本,点击Download 就可以下载对应的安装包了。
二、解压 - MySQL的目录结构
下载完成后我们得到的是一个压缩包,将其解压,我们就可以得到MySQL 8.0.33 的软件本体了(就是一个文件夹),我们可以把它放在你想安装的位置 。
- bin目录存放的是MySQL数据库当中提供的一些可执行文件,我们要想在任意目录下都能够执行这些指令,就需要配置一下环境变量
- 文档目录:docs
- include:C语言库,因为MySQL是C语言写的
bin目录工具汇总:
MySQL服务器端工具
- mysqld: SQL后台保护程序(MySQL服务器进程)。该程序必须运行之后。客户端才能通过连接服务器端程序访问和操作数据库。
- mysqld_safe: MySQL服务脚本。mysql_safe增加了一些安全特性,如当出现错误时重启服务器,向错误日志文件写入运行时间信息。
- mysql.server:MySQL服务启动服本。调用mysqld_safe来启动MySQL服务。
- mysql_multi:服务器启动脚本,可以启动或停止系统上安装的多个服务。
- myiasmchk:用来描述、检查、优化和维护MyISAM表的实用工具。
- mysqlbu:MySQL缺陷报告脚本。它可以用来向MySQL邮件系统发送缺陷报告。
- mysql_install_db:用于默认权限创建MySQ授权表。通常只是在系统上首次安装MySQL时执行一次。
MySQL客户端工具
- mysql: 交互式输入SQL语句或从文件以批处理模式执行SQL语句来操作数据库管理系统,就是我们的客户端。mysql是一个很常用的【mysql客户端工具】
- mysqldump:将MySQL数据库转储到一个文件,可以用来备份数据库。
- mysqladmin:用来检索版本、进程、以及服务器的状态信息。
- mysqlbinlog:用于从二进制日志读取语句。在二进制日志文件中包含执行的语句,可用来帮助系统从崩溃中恢复。
- mysqlcheck:检查、修复、分析以及优化表的表维护。
- mysqlhotcopy:当服务器在运行时,快速备份MyISAM或ISAM表的工具。
- mysql import:使用load data infile将文本文件导入相关表的客户程序。
- perror:显示系统或MySQL错误代码含义的工具。
- myisampack:压缩MyISAP表,产生更小的只读表。
- mysaqlaccess:检查访问主机名、用户名和数据库组合的权限。
mysql是一个很常用的【mysql客户端工具】,我们可以使用一下命令连接本机或者远程的mysql服务:
mysql -h 124.220.197.17 -P 3306 -uroot -p
三、配置
1. 添加环境变量
- 环境变量里面有很多选项,这里我们只用到Path这个参数。为什么在初始化的开始要添加环境变量呢?
- 在黑框(即CMD)中输入一个可执行程序的名字,Windows会先在环境变量中的`Path`所指的路径中寻找一遍,如果找到了就直接执行,没找到就在当前工作目录找,如果还没找到,就报错。我们添加环境变量的目的就是能够在任意一个黑框直接调用MySQL中的相关程序而不用总是修改工作目录,大大简化了操作。
右键" 此电脑 "→" 属性 ",点击" 高级系统设置 "
点击环境变量
在系统变量中新建MYSQL_HOME
在系统环境变量当中找到并双击Path
点击新建
最后点击确定
如何验证是否添加成功?
- 右键开始菜单(就是屏幕左下角),选择命令提示符(以管理员身份运行)
- 打开黑框,敲入mysql,回车
如果提示" Can't connect to MySQL server on 'localhost' "则证明添加成功;
如果提示mysql不是内部或外部命令,也不是可运行的程序或批处理文件则表示添加添加失败,请重新检查步骤并重试。
2. 初始化MySQL
- 初始化MySQL执行bin目录下面的mysqld.exe命令,mysql.exe命令是用来登录数据库的。
以管理员身份,运行命令行窗口:
在刚才的命令行中,输入如下的指令:
mysqld --initialize-insecure
输入该命令后就会初始化MySQL的数据,就会在我们的解压目录下生成一个data文件夹,data文件夹下存放的就是MySQL当中的数据。
稍微等待一会,如果出现没有出现报错信息,则证明data目录初始化没有问题,此时再查看MySQL目录下已经有data目录生成。
tips:如果出现如下错误
是由于权限不足导致的,应该以管理员方式运行 cmd !!!
3. 注册MySQL服务
命令行(注意必须以管理员身份启动)中,输入如下的指令,回车执行:
mysqld -install
现在你的计算机上已经安装好了MySQL服务了。
在服务当中看到这一行就说明MySQL服务注册成功了,并且在开机的时候会自启动。
4. 启动MySQL服务
在黑框里敲入net start mysql,回车。
net start mysql // 启动mysql服务
net stop mysql // 停止mysql服务
5. 修改默认账户密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
在黑框里敲入" mysqladmin -u root password 你要修改的密码(这里就用123456) ",这里的" 123456 "就是指默认管理员(即root账户)的密码,可以自行修改成你喜欢的。
mysqladmin -u指定的是用户,root是我们MySQL数据库安装完毕之后它就已经自带的一个账号,它是一个超级管理员的账号,然后后面跟上一个关键字password,后面指定你要修改的密码1234,1234指定的就是root这个用户他登录MySQL的密码。
mysqladmin -u root password 1234
root是用户名的意思 -p就是密码的意思
四、登录 / 连接MySQL
通过客户端连上MySQL服务就可以了
登陆参数:
mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)
- MySQL默认端口号3306
MySQL服务器启动完毕后,然后再使用如下指令,来连接MySQL服务器:
mysql -u用户名 -p密码 [-h数据库服务器的IP地址 -P端口号]
- -h 参数不加,默认连接的是本地 127.0.0.1 的MySQL服务器
- -P 参数不加,默认连接的端口号是 3306
- -u指定的是我们使用的是哪个用户名 -p代表的是password
- -h代表的是要连接哪一台数据库
上述指令,可以有两种形式:
- 密码直接在-p参数之后直接指定 (这种方式不安全,密码直接以明文形式出现在命令行)
- 右键开始菜单,选择"命令提示符",打开黑框。
- 在黑框中输入," mysql -uroot -p123456 ",回车,出现下图且左下角为" mysql> ",则登录成功。
mysql -uroot -p123456
- 上面登录方式有个警告,是因为这样登录的话我们的密码就暴露出来了,不安全,可以这样登 录:
- 密码在-p回车之后,在命令行中输入密码,然后回车
退出mysql:
exit
quit
五、卸载MySQL
如果你想卸载MySQL,也很简单。
点击开始菜单,输入cmd,选择 "命令提示符",选择右侧的 "以管理员身份运行"。
1. 敲入"net stop mysql",回车。
net stop mysql
2. 再敲入"mysqld -remove mysql",回车。
mysqld -remove mysql
3. 最后删除MySQL目录及相关的环境变量。
至此,MySQL卸载完成!
1.1.4 企业使用方式(了解)
上述的MySQL服务器我们是安装在本地的,这个仅仅是在我们学习阶段,在真实的企业开发中,MySQL数据库服务器是不会在我们本地安装的,因为在开发当中,这台MySQL数据库当中所存储的数据是需要多个开发人员共享的,如果安装在你的电脑上,你把电脑一关,别的开发人员就没法访问了,因为数据库是在公司的服务器上安装的,而服务器还需要放置在专门的IDC机房中的,IDC机房呢,就需要保证恒温、恒湿、恒压,无尘而且还要保证网络、电源的可靠性(备用电源及网络)。
那我们要想使用服务器上的这台MySQL服务器,就需要在我们的电脑上去远程连接这台MySQL。 而服务器上安装的MySQL数据库呢,并不是你一个人在访问,我们项目组的其他开发人员也是需要访问这台MySQL的。
我们在学习阶段,如果想提前体验一下企业中数据库的使用方式,可以借助于VMware虚拟机来实现,通过这款虚拟机软件,我们就可以虚拟出一台计算机,而服务器就是一台计算机。我们可以在我们的电脑上安装一个VMware,然后在Vmware虚拟机上在安装一个服务器操作系统Linux,然后再在Linux服务器上安装各种企业级软件。