MySQL架构与数据库基础

文章目录

  • 一、数据库概念
  • 二、数据库的简单概念
  • 三、SQL
  • 四、MySQL架构

一、数据库概念

数据库是一个以某种由组织的方式存储的数据集合。我们可以把数据库想象称为一个文件柜。此文件柜是一个存放数据的物理位置,不管数据是什么以及如何组织的。数据库本质也需要像文件一样,能够持久化存储,故数据库存储介质为:磁盘内存

数据库database):保存有组织的数据的容器。(通常是一个文件或一组文件)

人们通常用数据库这个术语来代表他们使用误用导致混淆的数据库软件。这是不正确的,它是引起混淆的根源。确切地说,数据库软件应称为DBMS(数据库管理系统)。数据库是通过DBMS创建和操纵的容器。数据库可以是保存在硬设备上的文件,但也可以不是。在很大程度上说,数据库究竟是文件还是别的什么东西并不重要,因为我们并不直接访问数据库;我们使用的是DBMS,它替我们访问数据库。

DBMS可分为两类:一类为基于共享文件系统的DBMS,另一类为基于客户端-服务器(C/S)架构的。

MySQL、Oracle以及SQL Server等数据库是基于CS架构的数据库。这种数据库应用分为两个不同的部分。服务器部分是负责所有数据访问和处理的一个软件。这个软件运行在称为数据库服务器的计算机上。

与数据文件打交道的只有服务器软件。关于数据、数据添加、删除和数据更新的所有请求都由服务器软件完成。这些请求或更改来自运行客户机软件的计算机。客户机是与用户打交道的软件。例如,如果请求一个按字母顺序列出的产品表,则客户机软件通过网络提交该请求给服务器软件。服务器软件处理这个请求,根据需要过滤、丢弃和排序数据:然后把结果送回到我们的客户机软件。

客户机和服务器软件可能安装在两台计算机或一台计算机上。不管它们在不在相同的计算机上,为进行所有数据库交互,客户机软件都要与服务器软件进行通信。

所有这些活动对用户都是透明的。数据存储在别的地方,或者数据库服务器为我们完成这个处理这一事实是隐藏的。我们不需要直接访问数据文件。事实上,多数网络的建立使用户不具有对数据的访问权,甚至不具有对存储数据的驱动器的访问权。

这样的意义何在?因为为了使用MySQL,我们需要访问运行MySQL服务器软件的计算机和发布命令到MySQL的客户机软件的计算机。

  • 服务器软件为MySQL DBMS。我们可以在本地安装的副本上运行也可以连接到运行在我们具有访问权的远程服务器上的一个副本。
  • 客户机可以是MySQL提供的工具、脚本语言(如Perl)、Web应用开发语言(如JSP和PHP)、程序设计语言(如C、C++、Java)等。
    在这里插入图片描述
  • /usr/bin/mysql 是客户端程序,用于从命令行与MySQL数据库服务器进行交互。
  • /usr/sbin/mysqld 是服务器守护进程,用于启动和运行MySQL数据库服务器。

MySQL本质:基于C(mysql)S(mysqld)模式的一种网络服务;我们可以使用netstat -nltp查看对应端口是否有数据库服务端程序在运行。

通常,/usr/bin目录用于存放用户命令,而/usr/sbin目录则用于存放系统管理员命令。因此,mysql命令通常位于/usr/bin,而mysqld则位于/usr/sbin

MySQL客户端

  • 客户端的角色:客户端是用户与MySQL数据库交互的接口。它可以是一个命令行工具、图形用户界面(GUI)工具,或者是一个应用程序中的数据库驱动或库。
  • 常见的MySQL客户端
    • mysql:这是MySQL提供的官方命令行工具,允许用户通过终端或命令提示符直接输入SQL命令来操作数据库。
    • 图形界面工具:如MySQL Workbench、phpMyAdmin等,它们提供了更友好的用户界面来管理数据库。
    • 编程语言库:如Python的mysql-connector-pythonpymysql,Java的mysql-connector-java等,这些库允许开发者在应用程序中嵌入数据库操作代码。

MySQL服务器 (mysqld)

  • 服务器的角色mysqld是MySQL服务器进程,负责管理数据库文件、处理来自客户端的请求、执行SQL命令,并返回结果。
  • 服务器功能
    • 数据存储:将数据存储在硬盘上的文件中。
    • 数据检索:根据客户端的请求检索数据。
    • 数据更新:根据客户端的指令更新数据库中的数据。
    • 数据删除:根据客户端的指令删除数据库中的数据。
    • 安全性:管理用户权限,确保只有授权用户才能访问数据库。

客户端与服务器交互:

  • 当客户端程序(如mysql命令行工具)启动时,它会尝试连接到运行mysqld服务的服务器。
  • 连接建立后,用户可以在客户端输入SQL命令,这些命令会被发送到服务器。
  • mysqld服务器处理这些SQL命令,并将结果返回给客户端。
  • 客户端将结果显示给用户,或者根据应用程序的需要进一步处理。

例如,如果要使用mysql命令行工具,以下是一个简单的交互过程:

# 连接到MySQL服务器
mysql -u username -p
# 输入密码后,进入MySQL命令行界面
mysql> SHOW DATABASES;

在这个例子中,SHOW DATABASES;命令是由用户在mysql客户端输入的,然后这个命令被发送到mysqld服务器,服务器执行这个命令,并将数据库列表返回给客户端,客户端再将结果显示给用户。

如果需要启动或停止MySQL服务器,通常使用以下命令(可能需要root权限):

  • 启动MySQL服务器:

    systemctl start mysqld
    
  • 停止MySQL服务器:

    systemctl stop mysqld
    
  • 查看MySQL服务器的状态:

    systemctl status mysqld
    
  • 数据库设置为开机自启动:执行下方两个命令,实现数据库服务端开机自启动并守护进程化

    systemctl enable mysqld	#开机自启动
    systemctl daemon-reload	#进程守护进程化
    
  • 如果要取消开机自启动:

    systemctl disable mysqld
    
  • 连接数据库服务器:

    mysql -h 127.0.0.1 -P 3306 -u root -p
    

    -h-P可以省略。-h指明登录部署了mysql的服务器的主机。-P指明我们要访问的端口号。-u指明登录用户

退出:quit或者使用快捷命令:ctrl+p


二、数据库的简单概念

当我们将资料放入自己的文件柜的时候,并不是随便的将他们扔进一个抽屉就完事了,而是在文件柜中常见文件,然后把相关资料放入特定文件中。

在数据库中,这种文件称为表。表是一种结构化的文件,可用来存储某种特定的数据类型。表可以保存顾客清单、产品目录,或者其他信息等等。

table):某种特定类型数据的结构化清单。

这里关键的一点在于,存储在表中的数据是一种类型的数据或一个清单。决不应该将顾客的清单与订单的清单存储在同一个数据库表中。这样做将使以后的检索和访问很困难。应该创建两个表,每个清单一个表。

数据库中的每个表都有一个名字,用来标识自己。此名字是唯一的,这表示数据库中没有其他表具有相同的名字。

表名:表名的唯一性取决于多个因素,如数据库名和表名等的结合。也就是说,虽然在相同数据库中不能两次使用相同的表名,但在不同的数据库中可以使用相同的表名。

表由列组成。列中存储着表中某部分的信息。

column):表中的一个字段。所有表都是由一个或多个列组成的。

我们可把将数据库表想象为一个网格。网格中每一列存储着一条特定的信息。例如,在顾客表中,一个列存储着顾客编号,另一个列存储着顾客名,而地址、城市、州以及邮政编码全都存储在各自的列中。

数据库中每个列都有相应的数据类型。数据类型定义列可以存储的数据种类。例如,如果列中存储的为数字(或许是订单中的物品数),则相应的数据类型应该为数值类型。如果列中存储的是日期、文本、注释、金额等,则应该用恰当的数据类型规定出来。

数据类型datatype):所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据。

数据类型限制可存储在列中的数据种类(例如,禁止在数值字段中录入字符值)。数据类型还帮助正确地排序数据,并在优化磁盘使用方面起重要的作用。因此,在创建表时必须对数据类型给予特别的关注。

表中的数据是按行存储的,所保存的每个记录存储在自己的行内。如果将表想象成网格,其中垂直的列称为表列,水平的行称为表行。

row):表中的一个记录。

Mysql 服务端在启动时,会读取配置文件,对某些属性信息做配置。centos 7中 Mysql的配置文件为/etc/my.cnf,如下图右边所示(可修改这个文件的配置信息,对mysql做配置)。

在这里插入图片描述

数据库中的数据是存储在文件中的,建立不同的数据库就是建立不同的目录。创建一个数据库,就是在Linux下创建一个目录。

在这里插入图片描述

上图中,创建了名为 hello的数据库,并在其中建表。在数据库内建表,即在数据库所在目录下创建新文件。

在这里插入图片描述

上述工作都是Mysqld做的。也就是说数据库本质其实也是文件,只不过这些文件并不由程序员直接操作,而是由数据库的Mysqld服务帮我们进行操作管理。


三、SQL

SQL是结构化查询语言的缩写,Structured Query Language。它是一种专门用来与数据库通信的语言。几乎所有重要的DBMS都支持SQL。即主要用于管理关系数据库系统、处理数据以及在数据库中进行各种操作。SQL语句分为以下四类:

  1. DDL (Data Definition Language):数据定义语言用于定义数据库的结构,包括创建、修改和删除数据库中的对象,如数据库、表、视图、索引等。常见的DDL命令包括:
    • CREATE:创建新的数据库对象,如表、视图或索引。
    • ALTER:修改现有数据库对象。
    • DROP:删除数据库对象。
  2. DML (Data Manipulation Language):数据操作语言用于在数据库中插入、更新、删除和查询数据。DML命令通常涉及对表中的数据进行操作。常见的DML命令包括:
    • INSERT:向表中添加新行(记录)。
    • UPDATE:修改表中现有行的数据。
    • DELETE:从表中删除行。
  3. DQL (Data Query Language):数据查询语言通常被认为是SQL的一个子集,专门用于从数据库中检索数据。最常用的DQL命令是:
    • SELECT:从数据库中的一个或多个表中检索数据。
  4. DCL (Data Control Language):数据控制语言用于管理数据库中的数据访问权限。DCL命令通常用于创建和撤销用户权限、角色以及事务控制。常见的DCL命令包括:
    • GRANT:授予权限。
    • REVOKE:撤销权限。

这些SQL部分共同构成了数据库管理的关键工具集,使得用户和开发者能够有效地与数据库交互。


四、MySQL架构

MySQL 架构描述了 MySQL 系统的不同组件如何相互关联。 MySQL 架构基本上是一个客户端-服务器系统。 MySQL数据库服务器是服务器,连接到MySQL数据库服务器的应用程序是客户端。 MySQL架构包含以下主要组件:

在这里插入图片描述

上图展示了MySQL服务器的架构:

  1. Client Connectors (客户端连接器)

    • 这一层负责与客户端进行通信。MySQL支持多种连接器,如JDBC、ODBC、.NET、PHP、Python和C API。这些连接器允许不同语言的应用程序与MySQL服务器进行交互。
  2. MySQL Server (MySQL服务器)

    • 这是整个架构的核心部分,包含多个子系统和模块。

    • Connection Pool (连接池)

      • 负责处理客户端连接、身份验证以及安全性管理。连接池优化了连接的复用,减少了每次连接时的资源消耗。
    • Services & Utilities (服务和实用工具)

      • 包括备份与恢复、安全性、复制、分区、集群和Workbench工具。这些服务和工具为MySQL的管理和维护提供了支持。
    • SQL Interface (SQL接口)

      • 处理DML(数据操作语言)、DDL(数据定义语言)、存储过程、触发器和视图等SQL操作,是用户与数据库交互的主要接口。
    • Parser (解析器)

      • 负责对SQL语句进行词法和语法分析,并生成相应的语法树和代码。
    • Optimizer (优化器)

      • 负责SQL查询的优化,包括查询重写、扫描顺序以及索引的使用。这一步骤是提高查询性能的关键。
    • Caches (缓存)

      • 包含全局缓存和引擎特定的缓存,用于提高数据读取的速度,减少对磁盘的访问。
  3. Pluggable Storage Engines (可插拔存储引擎)

    • MySQL支持多种存储引擎,如MyISAM、InnoDB、Federated、Archive、Merge、Memory、Cluster和Example。每种存储引擎都有自己的特点,适合不同的应用场景。例如,InnoDB支持事务和外键,而Memory引擎适合需要快速访问的临时数据。
  4. Indexes (索引)

    • 索引用于加速数据检索,减少查询时间。不同的存储引擎可能有不同的索引类型和实现方式。
  5. File System & Logs (文件系统与日志)

    • 数据库数据最终存储在底层的文件系统中,如NTFS、ext4、SAN和NAS。日志文件(如二进制日志、错误日志、慢查询日志、通用日志等)则用于记录数据库的运行状态和历史操作,帮助管理员进行审计和故障排查。

整体来看,MySQL的架构设计灵活且模块化,能够根据不同的需求进行定制和优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/401444.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EMC学习笔记2——电磁兼容问题分析

分析一个电磁兼容问题一般从三方面入手,分别是骚扰源、敏感源、耦合路径。解决掉其中一个问题,就能解决大部分的电磁兼容问题。 例如:当骚扰源是雷电时,敏感源是电子线路时,我们需要消除的就是耦合电路。 耦合路径就是…

LLM - 微调(Fine-Tuning) Llama3 以及合并微调模型 教程

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/141218047 在微调 Llama3 大模型时,需要注意一些事项: 合适的预训练模型:不同的预训练模型具有不同的特点和适…

Java 操作 Redis和redis持久化

一、Jedis 我们要使用 Java 来操作 Redis&#xff0c;Jedis 是 Redis 官方推荐的 java连接开发工具&#xff01; 使用Java 操作 Redis 中间件&#xff01; 1.导入对应的依赖 https://mvnrepository.com/artifact/redis.clients/jedis <dependency><groupId>redi…

Keycloak中授权的实现-转载

在Keycloak中实现授权&#xff0c;首先需要了解与授权相关的一些概念。授权&#xff0c;简单地说就是某个&#xff08;些&#xff09;用户或者某个&#xff08;些&#xff09;用户组&#xff08;Policy&#xff09;&#xff0c;是否具有对某个资源&#xff08;Resource&#xf…

CAN总线详解-理论知识部分

目录 CAN总线简介 CAN总线硬件电路 CAN电平标准 CAN收发器 ​编辑 CAN物理层特性 CAN总线帧格式 数据帧 数据帧格式 数据帧发展历史 遥控帧 错误帧 过载帧 帧间隔 位填充 波形实例 CAN总线接收方数据采样 接收方数据采样遇到的问题 位时序 硬同步 再同步 波…

Cesium.js:webGIS领域的翘楚,开源全球地理空间数据可视化框架.

说起数据可视化/数字孪生开发&#xff0c;少不了webGIS&#xff0c;聊起webGIS不得不提大名鼎鼎的Cesium.js框架。 CesiumJS是一个用于创建地理空间应用程序的开源JavaScript库。它提供了丰富的地图和地理空间数据的可视化功能&#xff0c;可以用于构建基于地理位置的3D地图、…

nvm介绍、下载、安装、配置及使用

一、背景 在工作中&#xff0c;我们可能同时在进行2个或者多个不同的项目开发&#xff0c;每个项目的需求不同&#xff0c;进而不同项目必须依赖不同版本的NodeJS运行环境&#xff0c;这种情况下&#xff0c;对于维护多个版本的node将会是一件非常麻烦的事情&#xff0c;nvm就…

go语言源码解读之数据结构堆

概述 堆(heap)&#xff0c;是一种计算中常用的数据结构。本文我们将探讨对的特性、实现细节以及实际应用场景。 基本概念 堆是一种特殊的完全二叉树。堆分为大顶堆与小顶堆。 大顶堆的特点是&#xff0c;父节点的值总是大于或等于其子节点的值。 小顶堆的特点是&#xff0c…

DVWA-IDS测试(特殊版本)

起因 浏览DVWA历史更新记录发现有版本带有IDS插件&#xff0c;可以用于平时没有相关设备等场景演示用&#xff0c;所以开启本次测试。 下载 官方最新版本是移除了IDS插件&#xff0c;原因是“从不使用”&#xff0c;所以需要下载移除该插件之前的版本。 https://github.com/…

Excel中使用SUMIF函数对指定区域满足条件的进行求和

1.使用 SUMIF 函数对 范围 中符合指定条件的值求和。 例如&#xff0c;如果某列中含有数字&#xff0c;你只需对大于 5 的数值求和。 可使用以下公式&#xff1a;SUMIF(B2:B25,">5") 2.将条件应用于一个区域并对其他区域中的对应值求和。 例如&#xff0c;公式 S…

时钟缓冲器的相关知识

时钟缓冲器是比较常用的器件&#xff0c;其主要功能作用有时钟信号复制&#xff0c;时钟信号格式转换&#xff0c;时钟信号电平转换等。我们下面简单了解下&#xff1a; 1.时钟信号复制 例如ICS553芯片&#xff0c;其将单路输入时钟信号复制4份进行输出&#xff0c;输出信号具…

debian 常用命令

1、修改环境变量 /etc/profile export PATH/usr/local/bin:$PATHsource /etc/profile ## 生效临时改变export PATH/usr/local/bin:$PATH或者改变当前用户的vim ~/.bashrcsource ~/.bashrc // 生效 2、清除当前登录的历史操作 history -c 3、解压缩 压缩基本的命令格式 …

SD卡电路设计基础

一、定义 SD卡按尺寸分类可分为三类:标准 SD 卡、Mini SD 卡和 Micro SD 卡。其中Mini SD 卡比较少见&#xff0c;标准 SD 卡因为体积较大主要用在数码相机等对体积要求不严格的地方,我们最常用的是 Micro SD 卡&#xff0c;原名Trans-flash Card (TF 卡)。 Micro SD 作用:一…

天书般的Tree工具类

3.1 JAVA中树形对象的定义 在JAVA中树形结构是通过对象嵌套方式来定义的&#xff0c;如MenuVo对象中有一个子对象subMenus&#xff1a; Data public class MenuVo {private Long id;private Long pId;private String name;private Integer rank0;private List<MenuVo> s…

OpenHarmony UI动画-recyclerview_animators

简介 带有添加删除动画效果以及整体动画效果的list组件库 下载安装 ohpm install ohos/recyclerview-animatorsOpenHarmony ohpm 环境配置等更多内容&#xff0c;请参考如何安装OpenHarmony ohpm 包 使用说明 引入组件库 import { RecyclerView } from "ohos/recycler…

【图论】并查集(Union-find Sets)

文章目录 前言一、并查集(Union-find Sets)基本概念基本操作步骤 二、并查集的操作步骤1. 初始化 init2. 查询 find、合并 union&#xff08;未进行路径压缩&#xff09;3. 查询 find、合并 union&#xff08;路径压缩&#xff09; 三、Kruskal 算法中 环 的判断并查集的使用 总…

宝塔面板屏蔽 Censys,防止源站 IP 泄露

Censys 搜索引擎很强大。Censys 每天都会扫描 IPv4 地址空间&#xff0c;以搜索所有联网设备并收集相关的信息&#xff0c;并返回一份有关资源&#xff08;如设备、网站和证书&#xff09;配置和部署信息的总体报告。 在 IP 前加上 https 访问时&#xff0c;Nginx 会自动返回该…

Redis缓存——缓存更新策略和常见的缓存问题

一.什么是缓存&#xff1f; 前言&#xff1a;什么是缓存? 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码 前言&#xff1a;为什么要使用缓存&#xff1f; 一句话:因为速度快,好用 缓存数据存储于代码中,而代码运行在内存…

Unity新输入系统 之 InputAction(输入配置文件最基本的单位)

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​ 首先你应该了解新输入系统的构成结构&#xff1a;Unity新输入系统结构概览-CSDN博客 Input System - Unity 手册 1.In…

【SpringCloud】RabbitMQ——五种方式实现发送和接收消息

SpringAMQP SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配。 SpringAmqp的官方地址&#xff1a;https://spring.io/projects/spring-amqp SpringAMQP提供了三个功能&#xff1a; 自动声明队列、交换机及其绑定关系基于注解的…