【MySQL — 数据库基础】深入理解数据库服务与数据库关系、MySQL连接创建、客户端工具及架构解析

目录

[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


    1. 来到对应目录找到 mysql.exe,点击右键,通过终端打开,并输入mysql运行指令即可;

    1. 如果直接打开终端,我们可以通过cd命令进入到目标路径;

我们要去mysql.exe的工作目录,我们就可以输入cd,并且拷贝PS要去到的目录:

cd 就是改变目标路径的意思;


    1. 输入启动 mysql 的指令

    1. 输入密码;

    1. 配置好环境变量可直接在cmd执行mysql命令

补充


    1. 输入密码错误

    1. 使用快捷方式打开 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:

  1. Implemented in the server,rather than in the storage engine.
  2. Compressed MyISAM tables are supported only when using the compressed row format.Tables usingthe compressed row format with MyISAM are read only.
  3. Implemented in the server via encryption functions.
  4. Implemented in the server via encryption functions;In MySQL5.7 and later,data-at-restencryption is supported.
  5. Implemented in the server via encryption functions;encrypted NDB backups as of NDB
  6. 8.0.22;transparent NDB file system encryption supported in NDB8.0.29 and later.
  7. Support for FULLTEXT indexes is available in MySQL5.6 and later.
  8. Support for geospatial indexing is available in MySQL5.7 and later.
  9. InnoDB utilizes hash indexes internally for its Adaptive Hash Index feature.

相关推荐
凡人的AI工具箱4 分钟前
40分钟学 Go 语言高并发:RPC服务开发实战
开发语言·后端·性能优化·rpc·golang
R6bandito_10 分钟前
Qt几何数据类型:QLine类型详解(基础向)
c语言·开发语言·c++·经验分享·qt
杭电码农-NEO13 分钟前
【lua语言基础(四)】IO模型以及补充知识
开发语言·junit·lua
是十一月末20 分钟前
Python语法之正则表达式详解以及re模块中的常用函数
开发语言·python·正则表达式
老王笔记20 分钟前
MySQL如何区分幻读和不可重复读
数据库·mysql
不爱学习的啊Biao21 分钟前
【08】MySQL复杂查询:子查询语句详解与示例
数据库·mysql·子查询
一只大侠21 分钟前
计算S=1!+2!+3!+…+N!的值:JAVA
java·开发语言
一只大侠24 分钟前
输入一串字符,以“?”结束。统计其中字母个数,数字个数,其它符号个数。:JAVA
java·开发语言·算法
以后不吃煲仔饭24 分钟前
面试小札:线程池
java·后端·面试
Oneforlove_twoforjob24 分钟前
【Java基础面试题011】什么是Java中的自动装箱和拆箱?
java·开发语言