MySQL数据库:MySQL基础概要

文章目录

  • MySQL入门保姆级指南:从"为啥不用文件存数据"到搞懂四层架构
    • 一、灵魂拷问:有文件了,还要数据库干嘛?
    • 二、数据库圈的"各路神仙":主流数据库扫盲
      • [1. 企业级老大哥:Oracle](#1. 企业级老大哥:Oracle)
      • [2. 国民级顶流:MySQL](#2. 国民级顶流:MySQL)
      • [3. 微软全家桶选手:SQL Server](#3. 微软全家桶选手:SQL Server)
      • [4. 学霸开源款:PostgreSQL](#4. 学霸开源款:PostgreSQL)
      • [5. 迷你嵌入式:SQLite / H2](#5. 迷你嵌入式:SQLite / H2)
    • [三、MySQL 初上手:从连接到写出第一条 SQL](#三、MySQL 初上手:从连接到写出第一条 SQL)
      • [1. 先搞懂:服务器、数据库、表是什么关系?](#1. 先搞懂:服务器、数据库、表是什么关系?)
      • [2. 连接 MySQL:命令详解 + 踩坑指南](#2. 连接 MySQL:命令详解 + 踩坑指南)
      • [3. 服务怎么启停?](#3. 服务怎么启停?)
      • [4. 五分钟完成:建库→建表→插数据→查询](#4. 五分钟完成:建库→建表→插数据→查询)
      • [5. 字符集这个坑:别用 utf8,要用 utf8mb4](#5. 字符集这个坑:别用 utf8,要用 utf8mb4)
    • [四、扒开 MySQL 的壳:四层架构到底干了啥](#四、扒开 MySQL 的壳:四层架构到底干了啥)
    • [五、SQL 的三大门派:DDL、DML、DCL](#五、SQL 的三大门派:DDL、DML、DCL)
      • [1. DDL:数据定义语言](#1. DDL:数据定义语言)
      • [2. DML:数据操纵语言](#2. DML:数据操纵语言)
      • [3. DCL:数据控制语言](#3. DCL:数据控制语言)
    • [六、存储引擎:MySQL 的"可更换心脏"](#六、存储引擎:MySQL 的“可更换心脏”)
      • [1. 什么是存储引擎?](#1. 什么是存储引擎?)
      • [2. 两大经典引擎对比:InnoDB vs MyISAM](#2. 两大经典引擎对比:InnoDB vs MyISAM)
    • 写在最后

MySQL入门保姆级指南:从"为啥不用文件存数据"到搞懂四层架构

很多刚接触编程的同学都会有一个灵魂拷问:

我用 txt、Excel 存数据不行吗?为啥非要整个数据库出来,又是安装又是配置,麻烦得要死?

别急,这篇文章就从这个问题出发,带你从零开始啃完 MySQL 基础。看完你不仅能上手写 SQL,还能跟人扯清楚 MySQL 内部四层架构,面试基础面直接通关。


一、灵魂拷问:有文件了,还要数据库干嘛?

咱们先说说用文件存数据的几宗罪:

  1. 查询慢到怀疑人生

    你想在 100 万行的 CSV 里找一条特定数据?基本得从头扫到尾,数据量一大,找个数据比在乱房间里找袜子还慢。

  2. 安全性几乎为零

    文件说删就删、说改就改,没有权限控制,也没有操作留痕。哪天手滑删错文件,直接连夜买站票跑路。

  3. 海量数据扛不住

    文件越大读写越卡顿,到了 TB 级别,普通文件系统基本就卡成 PPT 了。

  4. 程序控制太麻烦

    想在代码里实现"按条件修改某几行数据",用文件得自己写一堆读写、定位、判断逻辑,纯纯重复造轮子。

而数据库,就是专门为了解决这些问题诞生的数据管理系统 。它把数据有条理地组织起来,提供标准 SQL 语言来操作,自带权限、事务、索引等一堆黑科技,本质就是在文件系统之上,又封装了一层更智能的数据管理层。


二、数据库圈的"各路神仙":主流数据库扫盲

现在市面上的数据库五花八门,先给大家盘几个最常见的,心里先有个数:

1. 企业级老大哥:Oracle

甲骨文公司的旗舰闭源商业数据库,贵,但是稳。

银行、国企、大型企业核心系统的标配,主打一个"不出事"。功能极强、性能拉满,就是授权费能让小公司望而却步。

顺带一提:咱们学的 MySQL,现在也是甲骨文旗下的产品。

2. 国民级顶流:MySQL

全世界使用最广的开源数据库,互联网公司标配。

并发能力强,对简单 SQL 的处理速度快,电商、社交、论坛这类场景基本都是它的天下。

优点是免费、生态好、学习资料多;缺点是面对极复杂业务逻辑时,性能不如 Oracle。

3. 微软全家桶选手:SQL Server

微软自家产品,.NET 开发的标配。

和 Windows 生态深度绑定,图形化工具做得很友好,中大型项目用得多。

4. 学霸开源款:PostgreSQL

加州大学伯克利分校研发,完全开源免费,可商用可二次修改。

功能非常强大,支持很多复杂数据类型和高级特性,这几年热度飙升,很多公司开始从 MySQL 转向 PG。

5. 迷你嵌入式:SQLite / H2

这俩都是"小个子"选手:

  • SQLite:C 语言编写的轻量数据库,整个程序就一个小文件,嵌入式设备、手机 APP 里常用,几百 KB 内存就能跑。
  • H2:Java 编写的嵌入式数据库,直接当作 jar 包嵌进项目里,本地开发测试非常方便。

三、MySQL 初上手:从连接到写出第一条 SQL

咱们以最经典的 MySQL 5.7 为例,从零跑通第一波操作。

1. 先搞懂:服务器、数据库、表是什么关系?

很多初学者一开始会把这仨搞混,其实逻辑很简单:

  • 数据库服务器(MySQL Server):安装在机器上的后台程序,一台机器一般装一个,它可以同时管理很多个数据库。
  • 数据库(Database) :可以理解成独立的仓库,一般一个项目对应一个数据库。比如电商项目建 shop 库,博客项目建 blog 库。
  • 表(Table):数据库里的一张张表格,用来存储一类具体数据。比如用户表、商品表、订单表。

一句话总结:一个服务器管多个仓库,一个仓库里放多个货架,货架上摆着数据。

2. 连接 MySQL:命令详解 + 踩坑指南

安装完 MySQL 服务后,我们用客户端命令去连接它。标准命令长这样:

bash 复制代码
mysql -h 127.0.0.1 -P 3306 -u root -p
参数详解(重点!初学者90%的坑都在这)
参数 含义 注意事项
-h 主机地址 本机连接可以省略,默认连 localhost
-P 端口号 大写P! 默认 3306,可省略
-u 用户名 比如管理员账号 root
-p 密码 小写p! 后面不要直接写密码,回车后再输入,更安全

❌ 经典错误写法:mysql -h 127.0.0.1 -p 3306 -u root -p

小写 -p 后面的 3306 会被 MySQL 当成数据库名,直接报错 Unknown database '3306',这个坑几乎人人踩过。

回车后输入密码,看到 mysql> 提示符,就说明连接成功了。

小提示:SQL 语句末尾要加分号 ; 代表结束,也可以用 \g,效果完全一样。

3. 服务怎么启停?

MySQL 是后台服务,不同系统管理方式不同:

  • Windows :按下 Win+R 输入 services.msc,在服务管理器里找到 MySQL 服务,就能启停。

  • Linux/CentOS :用 systemctl 命令管理

    bash 复制代码
    systemctl start mysqld    # 启动
    systemctl stop mysqld     # 停止
    systemctl restart mysqld  # 重启
    systemctl status mysqld   # 查看状态

4. 五分钟完成:建库→建表→插数据→查询

一套标准流程,直接复制就能跑:

sql 复制代码
-- 1. 创建数据库,指定字符集(划重点!)
CREATE DATABASE helloworld DEFAULT CHARACTER SET utf8mb4;

-- 2. 进入这个数据库
USE helloworld;

-- 3. 创建学生表
CREATE TABLE student (
    id INT,
    name VARCHAR(32),
    gender VARCHAR(2)
);

-- 4. 插入三条数据
INSERT INTO student (id, name, gender) VALUES (1, '张三', '男');
INSERT INTO student (id, name, gender) VALUES (2, '李四', '女');
INSERT INTO student (id, name, gender) VALUES (3, '王五', '男');

-- 5. 查询所有数据
SELECT * FROM student;

5. 字符集这个坑:别用 utf8,要用 utf8mb4

这里补一个教材里很少提但必踩的坑:

MySQL 里的 utf8 不是真正的 UTF-8,它最多只存 3 个字节,存不了 emoji 表情和生僻字。

真正的 UTF-8 是 utf8mb4,支持 4 字节存储。

建库一律默认用 utf8mb4,省得后面出现乱码拍大腿。


四、扒开 MySQL 的壳:四层架构到底干了啥

很多人学了半年 SQL,都不知道 MySQL 内部长啥样。其实它就是典型的分层设计,从上到下一共四层,咱们一层一层扒。

第一层:接待处------连接池(Connection Pool)

所有客户端连接,第一步都到这。

负责连接管理、账号密码认证、安全校验,就像公司前台,先核对你有没有预约(密码对不对),再给你发个访客牌(连接)。

第二层:大脑------SQL 处理层

这一层是 MySQL 的核心,只负责处理 SQL 逻辑,不直接碰磁盘。

  1. SQL 接口:接收客户端发过来的 SQL 语句。
  2. 解析器(Parser) :检查 SQL 语法是否正确,比如你写 show databass; 拼错单词,就是在这被拦下的。
  3. 优化器(Optimizer):同一条 SQL 有很多种执行方式,优化器会选出成本最低的方案。比如要不要走索引、先查哪张表。
  4. 缓存(Caches):查询过的结果会缓存起来,下次同样的查询直接返回,不用去读磁盘。

旁边还有一堆工具组件:备份恢复、主从复制、集群、分区等等。

第三层:干活的------可插拔存储引擎

这是 MySQL 最有特色的设计:插件式存储引擎 。

上面的 SQL 层只下发"读数据、写数据"的命令,具体怎么存、怎么读,全靠存储引擎实现。不同的存储引擎,有完全不同的特性。

常见的引擎有 InnoDB、MyISAM、Memory、Archive 等等。

现在默认、也是最常用的就是 InnoDB,支持事务、行锁、崩溃恢复,项目开发基本都用它。

第四层:家底------文件系统

最底层就是操作系统的文件系统(Linux 的 ext4、Windows 的 NTFS),也可以是 SAN、NAS 这类存储设备。

所有的数据、索引、日志,最终都会写成磁盘上的文件。

一条 SQL 的旅行日记

给大家捋一遍 SELECT * FROM student WHERE id=1; 的完整流程:

  1. 客户端发请求 → 连接池校验账号密码,建立连接
  2. SQL 语句交给 SQL 接口
  3. 解析器检查语法,生成语法树
  4. 优化器生成执行计划,决定走主键查询
  5. 调用 InnoDB 存储引擎去读取数据
  6. InnoDB 先查缓存,没有就去磁盘查找,把数据返回
  7. 结果原路返回给客户端

五、SQL 的三大门派:DDL、DML、DCL

SQL 语句按功能分成三大类,别记混了:

1. DDL:数据定义语言

Data Definition Language ,用来定义数据结构。

通俗说就是建库、建表、改表结构这类"搞建筑"的操作。

代表命令:CREATE(创建)、DROP(删除)、ALTER(修改)

2. DML:数据操纵语言

Data Manipulation Language ,用来操作表里的数据。

就是增、删、改、查,日常开发写得最多的就是这类。

其中查询语句 SELECT 又单独被称为 DQL(数据查询语言) 。

代表命令:INSERT、DELETE、UPDATE、SELECT

3. DCL:数据控制语言

Data Control Language ,用来管理权限、控制事务。

比如创建用户、给用户授权、提交事务这些。

代表命令:GRANT(授权)、REVOKE(撤权)、COMMIT(提交事务)


六、存储引擎:MySQL 的"可更换心脏"

1. 什么是存储引擎?

简单说,存储引擎就是数据的存储方式 + 读写实现逻辑 。

MySQL 厉害就厉害在,你可以给每张表选不同的存储引擎,就像给不同的车装不同的发动机------拉货用柴油机,跑赛道用汽油机。

查看所有引擎的命令:

sql 复制代码
SHOW ENGINES;

2. 两大经典引擎对比:InnoDB vs MyISAM

这是面试基础题必考点,直接整理成对比表:

特性 InnoDB MyISAM
事务支持 ✅ 支持(核心优势) ❌ 不支持
锁粒度 行级锁,并发性能高 表级锁,并发性能差
崩溃恢复 ✅ 支持,不容易丢数据 ❌ 崩溃后容易损坏
外键约束 ✅ 支持 ❌ 不支持
全文索引 5.7 版本后开始支持 ✅ 原生支持
适用场景 绝大多数业务场景,需要事务、高并发 读多写少的简单场景,现在基本淘汰

一句话总结:现在开发无脑用 InnoDB 就对了,MyISAM 是上古时代的产物,了解历史就行。


写在最后

MySQL 入门其实不难,难的是很多人上来就死背语法,却没搞懂"为什么这么设计"。

这篇文章带你从"为什么要有数据库"讲到内部架构,再到基础操作,就是希望你先建立一个整体的认知。

接下来的学习建议:

  1. 多敲命令,别光看。SQL 是敲出来的,不是背出来的。
  2. 先把基础的增删改查、条件查询、联表查询练熟。
  3. 再去深入索引、事务、存储引擎这些进阶内容。

祝大家 SQL 写得飞起,永不死锁~

相关推荐
雪碧聊技术1 小时前
从 0 跑通一个最小 RAG Demo:文档切分、向量检索与答案生成
数据库·oracle
喜欢的名字被抢了1 小时前
08-Redis 性能优化篇:快在哪、BigKey、HotKey、慢查询与内存
数据库·redis·性能优化
阳光九叶草LXGZXJ1 小时前
达梦数据库-学习-68-dmasm0X_XXXXXX.log日志激增
linux·运维·数据库·sql·学习
Mortalbreeze1 小时前
MySQL 基础篇(三):一文掌握 MySQL 常见数据类型
linux·服务器·数据库·mysql
青山木1 小时前
秒杀系统设计(一):需求拆解与流量治理
java·数据库·redis·后端·架构
lusklusklusk1 小时前
Oracle数据库基础之8_闪回
数据库·oracle
lusklusklusk2 小时前
Oracle数据库基础之10_性能优化
数据库·oracle·性能优化
Omics Pro2 小时前
预测性虚拟细胞中显式机理算子
大数据·数据库·人工智能·python·算法·机器学习·自然语言处理
看浪的路人2 小时前
第5讲:Prompt 管理与版本追踪
大数据·数据库·elasticsearch