目录
[1. 数据库服务&数据库&表之间的关系](#1. 数据库服务&数据库&表之间的关系)
[1.1 复习 my.ini](#1.1 复习 my.ini)
[1.2 MYSQL服务基于mysqld启动而启动](#1.2 MYSQL服务基于mysqld启动而启动)
[1.3 数据库服务的具体含义](#1.3 数据库服务的具体含义)
[1.4 数据库服务&数据库&表之间的关系](#1.4 数据库服务&数据库&表之间的关系)
[2. 客户端工具](#2. 客户端工具)
[2.1 客户端连接MySQL服务器](#2.1 客户端连接MySQL服务器)
[2.2 客户端与数据库服务器之间的通讯方式](#2.2 客户端与数据库服务器之间的通讯方式)
[2.2.1 C/S架构与B/S架构](#2.2.1 C/S架构与B/S架构)
[2.2.2 C/S架构](#2.2.2 C/S架构)
[2.2.3 B/S架构](#2.2.3 B/S架构)
[2.3 图像化客户端工具 ](#2.3 图像化客户端工具)
[3. 创建一个新的连接](#3. 创建一个新的连接)
[4. SQL的简介](#4. SQL的简介)
[4.1 什么是SQL](#4.1 什么是SQL)
[4.2 SQL分类](#4.2 SQL分类)
[5. MySQL架构](#5. MySQL架构)
[6. 存储引擎](#6. 存储引擎)
[6.1 简介](#6.1 简介)
[6.2 查看存储引擎](#6.2 查看存储引擎)
[6.3 存储引擎对比](#6.3 存储引擎对比)
文章介绍
本文主要介绍了数据库服务、客户端工具、SQL语言、MySQL架构以及存储引擎的基本概念和操作。
以上内容涵盖了数据库服务的基础知识,客户端工具的使用,SQL语言的介绍,MySQL的架构和存储引擎的详细信息,为读者提供了一个全面的数据库知识概览。
1. 数据库服务&数据库&表之间的关系
- 数据库服务器是指在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库;
- 一般开发人员会针对每一个应用创建一个数据库。
- 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
- 数据库服务器、数据库和表的关系如下:
我们把数据库安装好之后,在服务列表中,就会有MYSQL的服务项 ,并且处于正在运行的状态;
要确保当前系统有一个可以运行的数据库服务即可,不用的可以通过属性调整启动类型,建议使用的MYSQL修改成自动;
1.1 复习 my.ini
我们在上次学习MYSQL配置文件时,通过记事本打开my.ini,在服务区域,我们配置了端口号,mysql服务在本地的数据目录,字符集,排序规则,存储引擎,和产生日志对应的目录(在my.ini中配置好产生日志的路径即可);
里面的内容中有一个[mysqld]节点,mysqld.exe 在 my.ini 配置文件中,对应的是[mysqld]节点;
1.2 MYSQL服务基于mysqld启动而启动
数据库安装成功之后,运行起来了一个程序,对外提供了一个网络服务,这个服务我们起的名字是MYSQL8.0,这个服务是怎么启动起来的呢?
mysqld.exe是在计算机上安装的数据库服务,它启动起来,意味着mysql服务也启动了;
我们可以配置mysql服务为自启动,mysql服务会跟随系统启动而启动,就可以对外提供持续(7*24h)的数据库服务;
目前安装在本机的MYSQL,是在一个开发环境中,还没有让数据库保存用户业务产生的大量的数据,就开发机而言,随时可以关闭数据库服务;
但是在公司的生产环境(线上环境),一般是把MYSQL安装在一个专用的服务器中(配置较高的电脑),这个服务器只要启动,如果没有产品迭代,或者大规模更新,这个数据库服务一般是不会关闭的,7*24h持续对外界提供服务,因为业务是不能停的;
mysqld后面的d表示deamon,是一个守护程序,所有的服务一般是以守护进程,常驻在系统中的;
1.3 数据库服务的具体含义
数据库服务,可以提供数据库的功能,让用户把数据存入数据库中;对外连接客户端,为客户端提供请求的地址,让客户端找到数据库所在的这台服务器,这个过程就是一个服务;
1.4 数据库服务&数据库&表之间的关系
数据库服务,和相关的记录数据的结构
安装数据库之后,本地提供了数据库服务,数据库服务中包含了很多个数据库,而不是只有一个数据库;比如说,可以在MYSQL数据库服务中,创建多个数据库
每一个应用程序,只要有数据产生,都有一个与之对应的一个数据库,我们就可以通过学习到的数据库操作,在提高MYSQL服务的机器上,创建属于自己的数据库;
所以一定要把数据库和数据库服务分开,一个数据库服务中,可能包含了很多个数据库;
每一个数据库保存着不同的数据,比如教务系统,会保存一些关于课表,作业,师生的一些信息,这些信息会被设计成一个个的表,这些信息会存放在不同的表中,用于区分:
这就是数据库服务与数据库之间的关系,数据库中又包含了各自应用程序所涉及到的一些数据,按照数据不同发分类,将这些数据分成表;如学生表中,记录的就是关于学生的信息,每一条学生信息,都会变成一个记录;
对于学生记录,一个学生信息可以在一个表中生成一个记录:
关于学生信息的信息项,可以继续加,如性别,年龄等待这些信息项,包括表中的学号,姓名,班级这些关于学生信息的描述,把每一个都叫做一列,这个描述叫做字段/列,类似面向对象中类的属性;
在软件设计的时候,先要根据需求内容,把类抽象出来,然后定义好类中的属性;数据库中的表可以类比成这个类,表中的每一列可以类比成类中的每一个属性,一条数据(所有列组成的一条记录),叫做一个数据行,类似面向对象中的使用类实例的对象;
总结
- 一台计算机提供的数据库服务中,可以创建多个数据库,不同的数据库记录不同的数据,每个数据库中有很多张数据表,每张数据表有很多条数据行,每条数据行由很多个数据列组成的;
- 数据库服务,数据库,表,行,列/字段是一个依次包含的关系;
- 在我们创建表时,强烈建议每一张表都有编号列/编号字段;
2. 客户端工具
2.1 客户端连接MySQL服务器
回顾
在my.ini文件中:
- [client]节点下的配置,是所有关于客户端的一些工具;
- [mysql]节点下的配置,是关于 mysql.exe ;
注意:mysqld.exe 是服务端的,mysql.exe 是客户端工具;
通过终端指令运行 mysql.exe
-
- 来到对应目录找到 mysql.exe,点击右键,通过终端打开,并输入mysql运行指令即可;
-
- 如果直接打开终端,我们可以通过cd命令进入到目标路径;
我们要去mysql.exe的工作目录,我们就可以输入cd,并且拷贝PS要去到的目录:
cd 就是改变目标路径的意思;
-
- 输入启动 mysql 的指令
-
- 输入密码;
-
- 配置好环境变量可直接在cmd执行mysql命令
补充
-
- 输入密码错误
-
- 使用快捷方式打开 mysql.exe 客户端
- 下面蓝色的路径,为复制的快捷方式的目标文件路径;
- 第一个双引号中的路径和我们在 cmd 时指定的目标路径是相同的,"-uroot" " -p"也是需要我们手动输入的;
- 后面表示指定默认字符集,utf8mb4,意味着在和服务器通信的过程中,使用utf8mb4来进行编码,就不会出现乱码的问题,所以推荐使用 UniCode结尾的快捷方式;
mysql.exe客户端只是在平时查看数据库信息的时候会用到,在编码的时候几乎不会用;
2.2 客户端与数据库服务器之间的通讯方式
2.2.1 C/S架构与B/S架构
- C/S架构即客户端/服务器架构模式
- B/S架构即浏览器/服务器架构模式
2.2.2 C/S架构
C/S架构全称是客户端/服务器(Client/Server)架构,是常用的两层架构。客户端需要安装客户端软件,服务端程序运行在服务器上,提供Socket或数据库服务。使用客户端与MySQL数据库服务器通讯属于C/S架构
- 常用于固定用户群体中。常见的C/S架构的应用,比如QQ,CCTALK,各种网络游戏等等,一般需要安装并且与服务器进行网络通信的都属于此类。
优点
- 大部分业务都可以在客户端完成,充分利用本地的计算机资源
- 响应速度快
- 个性化定制能力强
- 面向相对固定的用户群,对信息安全的控制能力强
缺点
- 需要安装客户端才能使用
- 维护成本高,任何一台电脑上的客户端出现问题都需要进行维护,升能过程繁琐
2.2.3 B/S架构
B/S架构全称是浏览器/服务器(Browser/Server)结构,分为Web浏览器、服务器程序、数据库服务三部分,可以理解为是对C/S架构一种改进。由于所有的业务逻辑都由服务器程序处理,所以客户端仅使用浏览器就可以完成所有操作,大大降低了客户端的维护成本。
B/S架构常用于对公开用户提供的网络服务中。比如常见的大型网站都属于此类。
优点
- 客户端零维护,只需要安装一个浏览器即可
- 所有业务都集中在服务器端,业务扩展非常方便
- 维护成本低,只需要维护服务器即可
缺点
- 服务器安全与业务处理能力需要花费很大精力与成本
- 不同浏览器支持不尽人意
我们知道,数据库服务是一个网络服务,客户端是一个应用程序;
当客户端向服务器发送请求的时候,必须要带着访问目标,也就是说,这个客户端要访问哪一个数据库,访问数据库中的哪一个表,访问这个表的哪一行,或者访问哪一行中的哪一列,都是可以明确标注出来的;
服务器就会把处理的结果返回给客户端,客户端接收到这个结果,就完成了一次客户端与服务器完整的通信;
对于客户端与服务器之间的交互模型,我们称之为C/S架构(Client/Server);
客户端与服务器之间是通过网络进行交互的,我们现在使用本机客户端来访问本机服务器,是不是通过网络来连接的呢?是不是C/S架构呢?
- 虽然我们访问的是本机的服务,但是还是通过网络服务的,只不过客户端与服务器在同一台电脑上而已;
- MYSQL启动后,是通过网络服务连接的,肯定是对外提供网络服务的,对于本机来说,没有其他的端口可以提供给本机客户端访问的本机服务器;
- 每台电脑上都有一个环回网卡,本地有一个固定的IP:127.0.0.1,代表本机的IP,不管当前机器也没有上网,只要访问127.0.0.1,访问的就是本机;也就是说,无论本机有没有网络,这个IP始终访问的都是本机地址;
总之,MYSQL是提供网络进行访问的;
如果在工作中连接数据库,可以指定IP地址去连接相应的服务器,这个服务器可能是内网的,也可能是外网的;这时候会出现一个安全性问题:
- 如果把端口号发布到公网/外网上的时候,其他机器都可以访问该服务器,一旦有人把这个用户名和密码猜对之后,就可能会对我们的数据库进行入侵,对数据库数据进行加密,破坏等等......也就是说,如果把服务公开到公网,可能会给黑客带来可乘之机;
鉴于这样的安全问题,云服务器厂商,或者自建机房,有很多技术手段可以拦截,比如说:可以通过防火墙,或者白名单,来限制可以连接服务器的机器;
简单介绍一下白名单的作用:
把指定IP加到白名单中,这个白名单IP上对应的机器才可以连接服务器,MYSQL安装完成之后,默认的安全策略就是白名单策略,本机可以连,但是在同一个网段下的机器无法连接,除非把这个机器的IP加到白名单中;所以,只有白名单中的机器才可以访问目标主机;
在公司里,一般都是把服务器部署到内网中,通过外网是无法连接上数据库服务器的;
当外网无法连接上数据库服务器的时候,可以通过跳板机去连接服务器;
可以先通过连接跳板机A,然后通过A中的命令行工具,来连接数据库服务器,这样的方式也就解决了安全问题,这是公司中常用的方式;
2.3 图像化客户端工具
图像客户端工具主要用于编写SQL断码,SQL是一个操作数据库的工具,也可以算是一种变成语言,也需要编辑器编写SQL语句;如果使用客户端命令行编写SQL语句,效率和体验都不好,所以需要图形化客户端工具;
如果系统中没有 workbench,可以直接打开之前下载的安装包:
点击add:
添加workbench
也可以去官网下载:
类似于workbench这样的图形化客户端工具,还有:
3. 创建一个新的连接
所有可视化工具都几乎分为这几个区
4. SQL的简介
4.1 什么是SQL
SQL(Structured Query Language)是结构化查询语言的简称,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库。
我们知道MYSQL是关系型数据库,这时候需要通过MYSQL来存储数据,我们对数据库的所有的操作该如何进行呢?我们如何操作数据库呢?
首先,我们需要明确一点,数据库是用来保存数据的;那么操作数据库,就要使用工具/语言,就是SQL;
SQL是一个标准,也是一门语言,在所有数据库中,都用SQL来操作数据库,只不过不同数据库,会在这个标准上进行一些细微的改动,比如一些关键字会作一些调整,查询的先后顺序会作一些调整;如 Sever SQL,Oracle,MySQL......可能略有不同,包括一些编写处理业务的程序等等,但是大体上是一样的;
在数据库层面,通过SQL这门语言,来编写数据库相应的操作;SQL是一门语言,意味着也可以定义一些变量,处理一些业务;
在一些金融行业,有些业务的代码中业务逻辑非常少,把大量的业务逻辑放在数据库中执行,就相当于我们用Java代码写的一些逻辑实现,全部用SQL语言实现了一遍,让这些逻辑在数据库中执行;但是随着数据库处理的数据量越来越大,那么对数据库的性能要求越来越高,把这些业务逻辑又搬回到代码层层面,让数据库专门发挥对数据的存储功能,本身这个SQL是一门针对数据库操作的语言,和数据库是两个概念,不要弄混了;
对于学习SQL语言,因为数据库现在专门用于存储数据,我们只需要学习对数据的增删查改和稍微复杂一点的查询即可;因为查询有表关联,我们在查询的时候,把关联关系处理清楚即可支撑我们处理业务;
4.2 SQL分类
|---------------------------------|-----------------------------------------------------------------|
| DDL【Data Definition Language】 | 数据定义语言,用来维护存储数据的结构代表指令:create,drop,alter |
| DML【Data Manipulation Language】 | 数据操纵语言,用来对数据(这里的数据可以理解为数据行)进行操作代表指令:insert,delete,update,select |
| DCL【Data Control Language】 | 数据控制语言,主要负责权限管理和事务代表指令:grant,revoke,commit |
5. MySQL架构
MySQL8.0服务器是由连接池、服务管理工具和公共组件、NoSQL接口、SQL接口、解析器、优化器、缓存、存储引擎、文件系统组成。MySQL还为各种编程语言提供了一套用于外部程序访问服务器的连接器。整体架构图如下所示:
6. 存储引擎
6.1 简介
存储引擎是MySQL数据库处理数据的核心组件,不同的存储引擎对数据如何存储、索引、更新和查询的实现方式各有不同,在不同的业务场景可以选用合适的存储引擎。MySQL服务器采用可插拔的存储引擎架构,在服务器运行时可以动态的加载和卸载。
6.2 查看存储引擎
查看当前服务器支持哪些存储引擎可以使用SHOW ENGINES语句,结果如下图所示INNODB默认的存储引擎:
6.3 存储引擎对比
Notes:
- Implemented in the server,rather than in the storage engine.
- Compressed MyISAM tables are supported only when using the compressed row format.Tables usingthe compressed row format with MyISAM are read only.
- Implemented in the server via encryption functions.
- Implemented in the server via encryption functions;In MySQL5.7 and later,data-at-restencryption is supported.
- Implemented in the server via encryption functions;encrypted NDB backups as of NDB
- 8.0.22;transparent NDB file system encryption supported in NDB8.0.29 and later.
- Support for FULLTEXT indexes is available in MySQL5.6 and later.
- Support for geospatial indexing is available in MySQL5.7 and later.
- InnoDB utilizes hash indexes internally for its Adaptive Hash Index feature.