MySQL架构与数据库基础

news2024/12/23 23:09:28

文章目录

  • 一、数据库概念
  • 二、数据库的简单概念
  • 三、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.coloradmin.cn/o/2044668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++-类与对象(上篇)

一、目标: 1. 面向过程和面向对象初步认识 2. 类的引入 3. 类的定义 4. 类的访问限定符及封装 5. 类的作用域 6. 类的实例化 7. 类的对象大小的计算 8. 类成员函数的 this 指针 二、对类与对象的介绍: 1.面向过程和面向对象初步认识 &#xff1a…

调用FluentUI中的折线图散点图等

文章目录 0.文章介绍1.源码位置2.线性图:基础版本2.1效果图2.2代码 3.线形图:封装版本3.1 效果图3.2 代码 0.文章介绍 调用项目FluentUI中的散点图、折线图组件,做定制化改进。 项目FluentUI源码位置:https://github.com/zhuzich…

手把手教你SpringBoot项目将Swagger升级3.0详解

SpringBoot项目将Swagger升级3.0 前言 这阵子观察到Swagger官方已经升级到了3.0的版本,想着升级体验一下最新的版本 新特性 移除了2.x版本的冲突版本,移除了guava等移除了EnableSwagger2新增了springfox-boot-starter… 引入依赖 新版本中&#xf…

三十八、【人工智能】【机器学习】【监督贝叶斯网络(Bayesian Networks)学习】- 算法模型

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

数据库-DML语言-数据操作语言

定义 DML是对表中数据进行操作的语言,涉及的关键字:INSERT UPDATE DELETE INSERT:向表中插入新数据的语句UPDATE:修改表中数据的语句DELETE:删除表中数据的语句 准备工作 USE mydb; 使用mydb库 CREATE TABLE person( 创建表personname VARCHAR(30),age INT…

AAAI‘25 今日截稿!SD 核心成员开源比 Midjourney 还强的文生图模型,现已提供一键启动

Midjourney 真的不香了!继 Stable Diffusion 3 于 6 月开源后,Stability AI 前核心成员 Robin Rombach 带领着新团队在本月初推出了 FLUX.1 图像生成模型家族。官方声称 FLUX.1 在多个关键指标上超越了 Midjourney v6.0 和 DALLE 3 等文生图的头部模型&a…

VMware Workstation Pro 安装 Ubuntu Server

这里写目录标题 VMware Workstation Pro 安装 Ubuntu Server1. 启动选项2. 系统语言3. 安装程序升级4. 键盘配置5. 安装类型6. 网卡配置7. 代理配置8. 系统镜像配置9. 硬盘配置10. 账户配置11. Ubuntu Pro 版本12. SSH 服务13. 推荐软件14. 安装成功15. 第一次重启报错16. 登录…

JavaScript调试:console 命令的使用

1、console 命令介绍 console 对象用于 JavaScript 调试。JavaScript 原生中默认是没有 console 对象,这是宿主对象(也就是浏览器)提供的内置对象。 用于访问调试控制台,在不同的浏览器里效果可能不同。 console 对象常见的两个用途&#x…

【计算机操作系统】覆盖与交换

覆盖与交换 覆盖与交换是实现内存空间扩充的技术,虚拟存储技术后续会详细讲解 覆盖技术 为了解决程序大小超过物理内存总和的问题引入了覆盖技术 覆盖技术的思想: 将程序分为多个段(多个模块),常用的段常驻内存&…

Go Kafka 操作详解

Go Kafka 操作详解 引言 Apache Kafka 是一个分布式流处理平台,广泛应用于构建实时数据管道和流应用程序。在 Go 语言中,使用 github.com/IBM/sarama 库可以方便地与 Kafka 进行交互。本文将详细介绍如何使用 Sarama 库在 Go 中实现 Kafka 的生产者和消…

等保测评中的安全需求分析:构建精准的信息安全防护体系

在数字化转型的时代背景下,信息安全成为企业发展的关键因素之一。等保测评,作为我国信息安全等级保护制度的重要组成部分,要求企业进行详细的安全需求分析,以构建精准、有效的信息安全防护体系。本文旨在探讨等保测评中的安全需求…

基于SpringBoot+VUE的在线视频教育平台(源码+文档+部署

主要内容:Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能与大数据、单片机开发、物联网设计与开发设计、简历模板、学习资料、面试题库、技术互助、就业指导等 业务范围:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写…

TQX310光口自环检测

本历程实现X310的光口自环测试,以及查看眼图。需要准备板卡以及好烧写的文件,文件在文档末尾的连接中提供。 X310连接好JTAG与电源线,在MGT x4口插入光口自环模块,并开机。 打开vivado,打开硬件管理器,会识…

Kubernetes—k8s集群存储卷(pvc存储卷)

目录 一、PVC 和 PV 1.PV 2.PVC 3.StorageClass 4.PV和PVC的生命周期 二、实操 1.创建静态pv 1.配置nfs 2.创建pv 3.创建pvc 4.结合pod,将pv、pvc一起运行 2.创建动态pv 1.上传 2.创建 Service Account,用来管理 NFS Provisioner 在 k8s …

Harmony OS 后台任务-代理提醒

三、代理提醒 传送门 1.什么是代理提醒 应用退到后台或进程终止后,仍然有一些提醒用户的定时类任务,例如购物类应用抢购提醒等,为满足此类功能场景,系统提供了代理提醒(reminderAgentManager)的能力。当…

Linux系统使用Typecho搭建个人网站并一键发布公网远程管理本地站点

文章目录 前言1. 安装环境2. 下载Typecho3. 创建站点4. 访问Typecho5. 安装cpolar6. 远程访问Typecho7. 固定远程访问地址8. 配置typecho 💡 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大…

Python 数据可视化,怎么选出合适数据的图表

数据可视化最佳实践 1. 引言:为什么数据可视化最佳实践很重要 数据可视化是数据分析和决策过程中不可或缺的一部分。通过有效的可视化,复杂的数据可以转化为易于理解的信息,从而帮助观众快速做出正确的判断。然而,糟糕的可视化可…

Qt-认识tT(1)

目录 QT是做什么的? 什么是QT GUI开发的各种技术方案 QT支持的平台 Qt的版本和优点 开发工具概述 Qt是做什么的? Qt是用来干嘛的? 什么是Qt Qt是⼀个跨平台的C图形用户界⾯应用程序框架。它为应用程序开发者提供了建立艺术级图形界⾯所…

Vue3+Ts封装类似el-drawer的抽屉组件

提供9个字段对drawer组件进行控制: modelValue: 对抽屉显示隐藏进行控制, width: 控制抽屉的宽度, title: 控制抽屉的标题, appendToBody: 是否将抽屉添加至body, closeOnClickModal: 是否点击遮罩层关闭抽屉, showConfirm: 是否显示确认按钮, showCancel: 是…

Linux网络:基于OS的网络架构

Linux网络:OS视角下的网络架构 网络分层模型OSI 七层模型TCP/IP 五层模型 协议操作系统与网络网络相关命令ifconfigpingnetstat 本博客将基于操作系统,讲解计算机网络的设计理念,帮助大家理解操作系统与网络之间的关系。 网络分层模型 网络…