一、 数据库基础

1.1 什么是数据库

  • 概念解释数据库 (Database) 是一种为了高效存储、管理和检索海量数据而设计的系统化电子数据集合。相较于传统的文件系统,数据库通过复杂的底层数据结构和索引机制,提供了更高的数据一致性、并发控制以及事务安全。

  • 笔记

    • 传统文件存储的缺陷

      1. 文件的安全性问题(缺乏权限控制与加密)。

      2. 文件不利于数据查询和管理(缺乏高效索引,需全量遍历)。

      3. 文件不利于存储海量数据(受限于单文件大小和系统 IO 瓶颈)。

      4. 文件在程序中控制不方便(需手动处理文件流和解析逻辑)。

    • 数据库存储介质:主要分为磁盘(Disk)和内存(Memory)。

    • 核心价值:解决上述文件管理弊端,提供更有效的数据管理能力。掌握数据库是衡量程序员水平的重要核心指标。

  • 发散思维 (Q&A)

    • Q: 既然内存数据库(如 Redis)读写极快,为什么还要保留磁盘介质的数据库?

    • A: 内存虽然速度快,但容量有限且成本高昂,且断电易失(易失性存储)。磁盘数据库(如 MySQL)通过 Buffer Pool 等缓存机制在性能和海量持久化存储之间取得了平衡。

1.2 主流数据库生态

  • 概念解释:根据底层数据组织模型的不同,数据库主要分为关系型数据库(基于二维表结构,如 MySQL、Oracle)和非关系型数据库(如键值对、文档型)。

  • 笔记

    • SQL Server:微软产品,.Net 程序员首选,适用于中大型项目。

    • Oracle:甲骨文产品,适用于大型项目及复杂的业务逻辑,但高并发表现通常不如 MySQL。

    • MySQL:全球最受欢迎的关系型数据库(现属甲骨文),并发性能卓越,适合简单 SQL 处理,不适合过于复杂的底层业务逻辑。广泛应用于电商、SNS、论坛等场景。

    • PostgreSQL:加州大学伯克利分校开发的关系型数据库,开源协议极其宽泛(无论私用、商用、学术均可免费使用、修改和分发)。

    • SQLite:轻量级关系型数据库,完全遵守 ACID 原则,底层封装为一个极小的 C 库。专为嵌入式设备设计,资源占用极低(仅需几百 KB 内存)。

    • H2:纯 Java 开发的嵌入式数据库,本质是一个类库,可直接无缝嵌入至 Java 应用项目中。

1.3 MySQL 基本使用与服务器关系

  • 概念解释数据库管理系统 (DBMS) 是指运行在服务器上的软件程序(如 MySQL Server),它可以同时管理多个数据库 (Database)。每个数据库内部又包含多张表 (Table),表用于映射保存程序应用中的实体数据。层级关系:Client -> MySQL Server (DBMS) -> 多个 Database -> 多张 Table

  • 发散思维 (Q&A)

    • Q: 为什么日常开发中,通常一个应用程序只对应创建一个数据库,而不是把所有数据揉在一个库里?

    • A: 主要是为了实现业务的解耦和权限隔离。不同应用的表隔离在不同库中,有助于后续的微服务拆分、独立备份以及分库分表架构的设计。

1.4 客户端连接

  • 函数名mysql_client_connection

  • 命令原型

    Bash

    mysql -h [主机IP] -P [端口号] -u [用户名] -p[密码]
    
  • 功能与参数说明

    • -h 127.0.0.1:指定连接的数据库服务器 IP。若缺省,默认连接本地 (localhost)。

    • -P 3306:指定连接端口号。若缺省,MySQL 默认使用 3306 端口。

    • -u root:指定登录的用户名。

    • -p:提示输入密码(注意:若直接在 -p 后跟密码不能有空格)。

    • 连接成功后,输入 help;\h 获取帮助,输入 \c 清除当前输入语句。

二、 MySQL 架构与核心组件

2.1 MySQL 物理体系架构

  • 概念解释可移植性 (Portability) 是指 MySQL 能够跨越多种操作系统平台(Unix/Linux、Windows、Mac、Solaris)稳定运行。虽然底层系统实现各异,但 MySQL 保证了各平台物理体系结构的一致性。

  • 笔记

    • 架构自顶向下包含:

      1. Client Connectors:JDBC, ODBC, .NET, PHP, Python, C API 等连接层。

      2. MySQL Server:包含连接池 (Connection Pool)、SQL 接口 (SQL Interface)、解析器 (Parser)、优化器 (Optimizer) 和缓存 (Caches/Buffers)。

      3. Pluggable Storage Engines (插件式存储引擎):负责核心数据的存取,如 InnoDB, MyISAM, Memory 等。

      4. File System:底层文件系统及日志文件(Redo, Undo, Error log 等)。
        ![[Pasted image 20260525192407.png]]

2.2 SQL 分类

  • 概念解释:SQL 按照功能范围被划分为不同的子集,用以规范化数据库对象定义、数据变更、权限控制等操作。

  • 笔记

    • DDL (Data Definition Language):数据定义语言,用于维护存储数据的结构。代表指令:create, drop, alter

    • DML (Data Manipulation Language):数据操纵语言,用于对具体数据进行增删改查。代表指令:insert, delete, update

      • DQL (Data Query Language):从 DML 中独立出的数据查询语言。代表指令:select
    • DCL (Data Control Language):数据控制语言,主要负责权限管理和事务控制。代表指令:grant, revoke, commit

2.3 存储引擎 (Storage Engine)

  • 概念解释存储引擎 是数据库管理系统用来执行如何将数据写入磁盘、如何为数据建立索引、如何更新及查询数据的底层核心实现技术。MySQL 采用插件式存储引擎 (Pluggable),允许根据不同表的应用场景切换不同的引擎。

  • 笔记

    • 查看支持的引擎:执行 show engines;

    • 主流存储引擎对比

      • InnoDB (默认):支持事务 (Transactions)、行级锁 (Row-level locking)、外键 (Foreign keys)、MVCC。存储成本较高,适合绝大多数核心业务。

      • MyISAM:不支持事务和外键,采用表级锁。拥有较高的批量插入速度 (Bulk Insert Speed),支持 B-Tree、全文索引。适合读多写少且无事务要求的场景。

      • Memory:基于内存存储,使用 Hash 索引,速度极快但断电数据丢失,主要用于构建临时表。

      • Archive:用于归档,占用空间极低。

      • Blackhole:类似 /dev/null,写入的数据直接消失,通常用于特殊的复制拓扑结构中。

  • 发散思维 (Q&A)

    • Q: 为什么 InnoDB 使用行级锁,而 MyISAM 使用表级锁?

    • A: 行级锁的并发粒度更细,能够支持高并发的写操作,这也是 InnoDB 适合现代复杂业务的原因。但行锁的开销更大(需维护锁状态),而 MyISAM 牺牲并发性换取了极致的查询和全表扫速度。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐