当前位置: 首页 > news >正文

[MySQL#1] database概述 常见的操作指令 MySQL架构 存储引擎

#1024程序员节|征文#


目录

一. 数据库概念

0.连接服务器

1. 什么是数据库

口语中的数据库

为什么数据不直接以文件形式存储,而需要使用数据库呢?

总结

二. ??基础操作

三. 主流数据库

四. 基础知识

服务器,数据库,表关系

数据逻辑存储

MySQL架构

SQL分类

存储引擎

1.何为存储引擎?

2. 存储引擎对比


在上一篇文章[MySQL#0] 详解如何在 Linux 上安装 MySQL | 常见登录问题,我们安装好了环境,接下来就来一起学习操作吧~

一. 数据库概念

0.连接服务器

mysql -h 127.0.0.1 -P 3306 -u root -p
  • -h:指明登录部署了MySQL服务的主机
  • -P:指明要访问的端口号
  • -u:指明登录用户
  • -p:指明需要输入密码

注意:

  • 如果没有写-h 127.0.0.1,默认是连接本地
  • 如果没有写-P 3306,默认是连接3306号端口

1.目前我们是免密码登录的,后面必须设置密码
2.密码输入的时候,是不会回显的


1. 什么是数据库

服务器角度理解数据库

在连接数据库时,我们使用的是mysql,启动数据库服务时使用的是mysqld。这两个分别代表什么呢?

  • mysql 是数据库服务的客户端。
  • mysqld 是数据库服务的服务器端。

说明:

  • 凡是可执行程序带有d的,通常称为守护进程。
  • MySQL本质:一个基于C/S(Client/Server)模式的网络服务
  • mysqld就是网络服务的后端
  • 通常我们提到MySQL,其实指的是MySQL的客户端mysql

这就是我们对数据库的第一层理解。

  • 现在我们明白了为什么安装MySQL时需要通过yum安装mysqld
  • 并启动服务后才能使用mysql进行连接,因为它是一个网络服务。
  • 既然MySQL是网络服务,我们可以查找到它绑定的端口号。

MySQL服务是什么?

  • MySQL是一种提供数据存取服务的网络程序。
口语中的数据库

数据库通常指的是,在磁盘或内存中存储的特定结构化的数据。

  • 数据库可以被看作是一套存储方案,通常指的是关系型数据库,表与表之间有特定的关系,数据按照特定逻辑进行组织。
  • 数据库最终还是存储在磁盘或内存中。我们暂时只考虑磁盘,存储在磁盘中的一组数据库文件就可以称为数据库,即一批数据以数据库的形式存储在磁盘中。

我们可以区分如下几点:

  • 数据库服务:mysqld
  • 数据库客户端:mysql
  • 数据库:磁盘上存储的一套数据库方案(文件)

数据库的本质仍然是存储在磁盘中的某种结构化数据,虽然我们可能对它的具体形式还不完全理解。文件是我们熟悉的存储形式

为什么数据不直接以文件形式存储,而需要使用数据库呢?

虽然文件提供了数据存储的基本功能,但它没有提供对数据内容的管理能力。

  • 举个例子,假设一个文件有10万行内容,每行都是一个IP地址,现在需要统计以**127**开头的IP地址个数。
  • 程序员需要打开文件,按行读取并手动统计,这是一项耗时的工作。
  • 文件只提供基本的读写功能,而没有数据管理能力,因此不方便。

数据库的意义: 它是一种数据存储的解决方案。程序员只需提出查询需求,数据库就会根据需求分析并返回结果。相当于是将数据管理起来了,使数据查询更加方便

例如,如果将10万个IP地址存储到数据库中,查询以127开头的IP地址时,数据库会进行内部处理,最终返回统计结果,而程序员无需自己编写复杂的代码。

总结数据库的作用

数据库本质上是一套对外提供数据存储和管理的解决方案。它包括:

  • 数据库客户端(mysql
  • 数据库服务器(mysqld
  • 存储在磁盘中的数据库文件

数据库的作用是让客户端提出需求后,服务器从数据库文件中进行操作,最终将结果返回客户端,展示给用户。

理解

  • 当一个MySQL客户端mysql提出一个需求(查询
  • MySQL服务端mysqld就去数据库文件当中自己进行增、删、查、改等,然后把结果返回给mysqld
  • 然后mysqld把结果交给mysql,然后就显示给用户了

总结

最后的结论——什么是数据库?

  1. 局部理解: 数据库是存储在磁盘中的结构化数据文件,这些文件能够被mysqld服务进程进行增删查改。
  2. 宏观理解: 数据库是一整套数据存储的解决方案。

文件保存数据的缺点:

  • 安全性问题
  • 不利于数据查询和管理
  • 不利于存储海量数据
  • 程序中控制不便

数据库的存储介质:

  • 磁盘
  • 内存

为了解决文件存储的这些问题,专家们设计了数据库,能够更有效地管理数据。数据库的使用和管理是衡量程序员水平的重要指标。


二. ??基础操作

见一见数据库

  1. 建立数据库,本质就是Linux下的一个目录
  2. 在数据库内建立表,本质就是在Linux下创建对应的文件即可!
  3. 数据库本质其实也是文件!!只不过这些文件并不由程序员直接操作,而是由数据库服务帮我们进行操作

使用 MySQL 建立一个数据库,建立一张表结构,插入一些数据,最后对比 MySQL 在 Linux 中的表现

  1. **??**查看当前数据库

    show databases;

此时可以查看当前所有存在的数据库。

  1. **??****数据库在哪里存放?**我们可以通过查看 MySQL 的配置文件,找到数据库的存储路径:

    vim /etc/my.cnf

在配置文件中,可以看到 datadir 字段,它指明了 MySQL 服务数据存放的路径。

切换到这个路径下,可以看到数据目录中存放的数据内容,包含普通文件和目录。

细心观察,您可能已经发现了一些有趣的现象,我们下面讲讨论

  1. ??****创建数据库接下来,我们通过 MySQL 客户端向 mysqld 服务端发出创建数据库的请求:

    create database helloworld;

创建数据库后,原本数据目录中没有 helloworld 这个目录,现在会多出一个名为 helloworld 的目录。

进入该目录后,可以发现除了一个配置文件外,并没有其他文件。

所谓建立数据库,实际上是在 Linux 系统下创建了一个目录。

当客户端发出 create database 的 SQL 指令后,mysqld 进程识别指令并在磁盘上创建一个目录。

这就是数据库在系统层面的表现。

  1. ??****选择数据库在创建数据库后,需要选择操作的数据库:

    use helloworld;

就像在文件系统中选择了一个具体的目录一样,use helloworld 代表接下来所有的操作都将在该数据库下进行。

  1. ??****创建数据库表接下来,创建一个名为 student 的表结构:

    create table student(
    name varchar(32),
    age int,
    gender varchar(2)
    );

表的字段定义了数据的属性列及其类型。建立了表之后,在数据库目录中会生成两个与该表相关的文件。

  • 在数据库内建立表,本质就是在Linux下创建对应的文件即可!
  • 数据库本质其实也是文件!!只不过这些文件并不是由程序员直接操作,而是由数据库服务帮(mysqld)我们进行操作。
  1. ??****向表中插入数据现在向 student 表中插入一些数据:

    insert into student (name, age, gender) values (‘张三’, 23, ‘男’);
    insert into student (name, age, gender) values (‘李四’, 24, ‘女’);
    insert into student (name, age, gender) values (‘王五’, 25, ‘男’);

nameagegender 三列中插入相应的数据。values 后跟的是要插入的具体值。

  1. ??****查询表中的数据使用以下命令查询刚才插入的数据:

    select * from student;

这会返回表中的所有记录。


总结

  • 数据的创建本质:在 Linux 系统下创建一个目录。
  • 表****的创建本质:创建相应的文件。
  • 数据存储的本质:将数据以结构化的方式存储到这些文件中。
  • 程序员不需要直接操作文件系统,而是通过 SQL 语句与 MySQL 服务交互,服务负责在磁盘上执行具体的操作。

操作总结

show
creat
use
creat table //创建一张表
insert //插入数据

注意:

  • 输入时 mysql 命令时,要加 ;
  • mysql 中有很多库,库中又有很多的表
  • 程序员不关心文件格式,只关心数据和想做什么,交给 sql 去实现即可

三. 主流数据库

以下是根据您的要求整理的内容格式:

MySQL:

  • 世界上最受欢迎的数据库之一,由甲骨文公司拥有。
  • 并发性能良好,但可能不适合处理非常复杂的业务逻辑。
  • 主要应用于电商、社交网络服务(SNS)、论坛等场景,对简单的SQL查询处理效果好。
  • 总结:效率良好,生态完善,免费

SQLite:

  • 轻量级数据库引擎,遵循ACID属性的关系型数据库管理系统。
  • 设计初衷是作为嵌入式解决方案,集成于小型C语言库中。
  • 极其适合资源受限的环境,如嵌入式系统,通常仅需几百KB内存即可运行。

SQL Server:

  • 微软出品的企业级数据库产品。
  • 深受.NET开发者喜爱,适用于中大型项目开发。

Oracle:

  • 也是甲骨文公司的旗舰数据库产品。
  • 针对大型企业级应用设计,能够支持复杂的业务流程。eg 银行(需付费,性能更好
  • 相较于MySQL,在高并发场景下的表现可能略逊一筹。

PostgreSQL:

  • 起源于加州大学伯克利分校的一个开源关系型数据库项目。
  • 支持广泛的高级功能,无论是个人使用、商业部署还是科学研究均可免费获取、修改和分发源代码。

H2 Database:

  • 一个完全基于Java编写的轻量级嵌入式数据库。
  • 可以直接以类库的形式集成到应用程序内部,便于快速开发与测试。

四. 基础知识

服务器,数据库,表关系

  • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库
  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据
  • 数据库服务器、数据库和表的关系如下:

数据逻辑存储

数据逻辑存储在表中插入数据后,这些数据在逻辑上是以行列式的结构存储的。

  • 一行表示一个实体(例如一个人)
  • 一列表示实体的某个属性(如姓名、年龄、性别)。

数据库内的数据在物理上并不是直接存储为表的形式,而是通过 MySQL 特定的协议和格式进行存储和管理。


MySQL架构

MySQL是一个可移植的数据库,几乎能在当前所有的操作系统上运行

  • 如 Unix/Linux、Windows、 Mac和Solaris
  • 各种系统在底层实现方面各有不同,但是 MySQL基本上能保证在各个平台上的物理体系结构的一致性

最上面是MySQL客户端,现在我们在Linux下是以命令行方式使用数据库,后面还会以C/C++,图像化界面使用数据库。

整体对于一个MySQL Server来讲主要功能由三层构成:

  • 第一层:连接池 —— 主要是安全连接管理(连接管理、鉴权、保证安全…)。
  • 中间这一层 —— 比如说客户端会下达各种SQL指令,收到指令然后会对指令做各种语法、词法分析,甚至会对SQL语句做一定程度优化按照SQL协议然后下达给下一层。
  • 第三层:存储引擎 —— 匹配的就是一个一个存储引擎,作用有点像计算机体系结构中的驱动。下面可能有不同种类的引擎,这些存储引擎从上层接收下达下来的经过词法语法调优过的SQL语句,然后存储引擎对这些SQL语句解释,说白了最下面这一层才是真正干事的,它帮我们去访问指定的数据库文件,访问指定的表。把数据进行增删查改。

怎么会有这么多存储引擎呢?

  • 主要还是因为数据库是给我们提供数据存储服务的,但是这个数据有种类的差别,有的是文档型的,有的是二进制型的,有的是大文件型的等等
  • 所以针对不同种类的数据的需求可能采用不同的存储方案
  • 所以MySQL给我们提供各种各样的搜索引擎,诸如MyISAM适合大文件读取,InnoDB有很丰富的索引支持可以方便进行快速的搜索查找。
  • 所以可以针对不同的场景由用户来配置MySQL底层,采用不同的存储引擎来满足上层的存储需求。

总结一下MySQL Server有三层

  • 第一层:安全连接管理
  • 第二层:词法、语法分析,SQL语句优化
  • 第三层:解释 SQL 语句,具体完成数据存储方案
  • 最下面一层:就是它依赖的对应文件系统,帮我们把数据以二进制方式存到特定的目录下然后构建特定的普通文件把数据存储好。

最终总结一下,MySQL依旧是一个文件系统,只不过处于OS提供的文件系统之上的一套存储解决方案。

最后一点,MySQL提供这么多的解决方案,它是支持热插拔的可以理解成插件一样。我们想选择哪一个就把哪一个存储引擎加载到MySQL里。


SQL分类

(结合系统层理解

DDL [data definition language] 数据定义语言,用来维护存储数据的结构

  • 代表指令:create,drop,,alter**(目录**

DML [data manipulation language] 数据操纵语言,用来对数据进行操作

  • 代表指令: insert,delete,update**(文件**

DML中又单独分了一个DQL,数据查询语言

  • 代表指令: select(打印文件

DCL [Data Control Language] 数据控制语言,主要负责权限管理和事务

  • 代表指令: grant,revoke,commit

也可以类似于数据结构来理解:

  • DDL: 定义一个链表
  • DML: 对链表增删查改

存储引擎

1.何为存储引擎?
  • 存储引擎:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法
  • MySQL的核心:插件式存储引擎,支持多种****存储引擎(解释 SQL 语句
  • 查看存储引擎:**show engines;**

2. 存储引擎对比

每一种存储引擎都有自己对应的一大堆功能。大部分情况下MySQL常用的存储引擎是MyISAM,InnoDB。其中更常用的是InnoDB。

之后会再具体的讲到~下篇文章见

相关文章:

[MySQL#1] database概述 常见的操作指令 MySQL架构 存储引擎

#1024程序员节|征文# 目录 一. 数据库概念 0.连接服务器 1. 什么是数据库 口语中的数据库 为什么数据不直接以文件形式存储,而需要使用数据库呢? 总结 二. ??基础操作 三. 主流数据库 四. 基础知识 服务器,数据库&…...

1.从零开始学会Vue--{{基础指令}}

全新专栏带你快速掌握Vue2Vue3 1.插值表达式{{}} 插值表达式是一种Vue的模板语法 我们可以用插值表达式渲染出Vue提供的数据 1.作用:利用表达式进行插值,渲染到页面中 表达式:是可以被求值的代码,JS引擎会将其计算出一个结果 …...

VS2022中.Net Api + Vue 从创建到发布到IIS

VS2022中.Net Api Vue 从创建到发布到IIS 前言一、先决条件二、创建项目三、运行项目四、增加API五、发布到IIS六、设置Vue的发布 前言 最近从VS2019 升级到了VS2022,终于可以使用官方的.Net Vue 组合了,但是使用过程中还是有很多问题,这里记录一下. 一、先决条件 Visual …...

RFID技术在制造环节的应用与价值

在现代制造业中,信息化和智能化已经成为企业提升竞争力的重要手段。RFID技术因其非接触式、远距离和高效识别的特点,广泛应用于生产的多个环节。本文将详细解读生产过程中RFID的关键应用场景,并结合实际案例,展示其为制造业带来的…...

(前端基础)HTML(一)

前提 W3C:World Wide Web Consortium(万维网联盟) Web技术领域最权威和具有影响力的国际中立性技术标准机构 其中标准包括:机构化标准语言(HTML、XML) 表现标准语言(CSS) 行为标准&#xf…...

Linux文件管理:硬链接与软链接

文章目录 1. 硬链接的设计目的(1)节省存储空间(2)提高文件管理效率(3)数据持久性(4)文件系统的自然特性 2. 软链接的设计目的**(1)跨文件系统引用****&#x…...

pnpm, eslint, vue-router4, element-plus, pinia

利用 pnpm 创建 vue3 项目 pnpm 包管理器 - 创建项目 Eslint 配置代码风格(Eslint用于规范纠错,prettier用于美观) 在 设置 中配置保存时自动修复 提交前做代码检查 husky是一个 git hooks工具(git的钩子工具,可以在特定实际执行特…...

在软件产品从开发到上线过程中,不同阶段可能出现哪些问题,导致软件最终出现线上bug

在软件产品从开发到上线的全生命周期中,不同阶段都可能因流程漏洞、技术疏忽或人为因素导致线上问题。以下是各阶段常见问题及典型案例: 1. 需求分析与设计阶段 问题根源:业务逻辑不清晰或设计缺陷 典型问题: 需求文档模糊&#…...

Spring Boot中如何自定义Starter

文章目录 Spring Boot中如何自定义Starter概念和作用1. 概念介绍2. 作用和优势2.1 简化依赖管理2.2 提供开箱即用的自动配置2.3 标准化和模块化开发2.4 提高开发效率2.5 提供灵活的配置覆盖3. 应用场景创建核心依赖1. 确定核心依赖的作用2. 创建 starter-core 模块2.1 依赖管理…...

制作Ubuntu根文件

系列文章目录 Linux内核学习 Linux 知识(1) Linux 知识(2) WSL Ubuntu QEMU 虚拟机 Linux 调试视频 PCIe 与 USB 的补充知识 vscode 使用说明 树莓派 4B 指南 设备驱动畅想 Linux内核子系统 Linux 文件系统挂载 QEMU 通过网络实现…...

SpringBoot快速接入OpenAI大模型(JDK8)

使用AI4J快速接入OpenAI大模型 本博文给大家介绍一下如何使用AI4J快速接入OpenAI大模型,并且如何实现流式与非流式的输出,以及对函数调用的使用。 介绍 由于SpringAI需要使用JDK17和Spring Boot3,但是目前很多应用依旧使用的JDK8版本&…...

UniApp 中制作一个横向滚动工具栏

前言 最近在用 UniApp 开发项目时,需要一个横向滑动的工具栏。常见的工具栏一般都是竖着的,但横向滑动的工具栏不仅能展示更多内容,还能让界面看起来更加丰富。不过很多朋友可能会发现,如何让内容“横着”展示又不变形、能流畅滚…...

react中如何获取真实的dom

在 React 中,获取真实的 DOM 元素通常通过 ref 来实现。ref 是一个特殊的属性,用于引用组件或 DOM 元素的实例。你可以通过 ref 获取到组件的真实 DOM 元素或组件实例。 1. 函数组件中的 useRef 在函数组件中,获取 DOM 元素的引用需要使用 …...

5G与物联网的协同发展:打造智能城市的未来

引言 随着科技的不断进步,智能城市的概念已经不再是科幻小说中的幻想,它正在逐步走进我们的生活。而这背后的两大驱动力无疑是 5G和 物联网(IoT)。5G网络以其高速率、低延迟、大容量的优势,与物联网的强大连接能力相结…...

【Qt】实现定期清理程序日志

在现有Qt程序中实现可配置日志保存天数的代码示例,分为界面修改、配置存储和核心逻辑三部分: // 1. 在配置文件(如settings.h)中添加保存天数的配置项 class Settings { public:int logRetentionDays() const {return m_settings…...

git bisect 使用二分法查找引入错误的提交

git bisect 使用二分法查找引入错误的提交 Git bisect 命令官方文档 git bisect 这个命令使用二分搜索算法来查找项目历史中哪个提交引入了一个错误 使用该命令时,首先告诉它一个已知包含错误的 “坏” 提交 以及一个已知在错误出现之前的 “好” 提交 然后 git b…...

一种面向车载时间敏感网络的联合路由与时隙调度负载均衡算法

论文标题 中文标题:一种面向车载时间敏感网络的联合路由与时隙调度负载均衡算法 英文标题:A Joint Routing and Time-Slot Scheduling Load Balancing Algorithm for In-Vehicle TSN 作者信息 Bo Xu, Xinrui Chang, Dongyang Xu, Shuo Wang, Uzair As…...

【弹性计算】容器、裸金属

容器、裸金属 1.容器和云原生1.1 容器服务1.2 弹性容器实例1.3 函数计算 2.裸金属2.1 弹性裸金属服务器2.2 超级计算集群 1.容器和云原生 容器技术 起源于虚拟化技术,Docker 和虚拟机和谐共存,用户也找到了适合两者的应用场景,二者对比如下图…...

Golang关于结构体组合赋值的问题

现在有一个结构体,其中一个属性组合了另外一个结构体,如下所示: type User struct {Id int64Name stringAge int64UserInfo }type UserInfo struct {Phone stringAddress string }如果要给 User 结构体的 Phone 和 Address 赋值的话&am…...

DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?

DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗? 文章目录 DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?一、引言1. 背景2. 问题 二、DeepSeek vs ChatGPT:谁更胜一筹?2.1 语言生成能力评测对比场景…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理&#xff1a…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线, n r n_r nr​ 根接收天线的 MIMO 系…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...