文章目录
-
- [MySQL 从零开始:安装与基础概念](#MySQL 从零开始:安装与基础概念)
- 一、前言:为什么需要数据库
- 二、文件存储的缺陷
-
- [2.1 文件存储的四大问题](#2.1 文件存储的四大问题)
-
- [1. 安全性问题](#1. 安全性问题)
- [2. 查询与管理不便](#2. 查询与管理不便)
- [3. 海量数据存储](#3. 海量数据存储)
- [4. 程序控制困难](#4. 程序控制困难)
- 三、什么是数据库
-
- [3.1 数据库的三个关键特性](#3.1 数据库的三个关键特性)
- [3.2 数据库的存储介质](#3.2 数据库的存储介质)
- 四、主流数据库对比
-
- [4.1 主要数据库产品](#4.1 主要数据库产品)
- [4.2 为什么选择 MySQL](#4.2 为什么选择 MySQL)
- [五、Ubuntu 22.04 安装 MySQL](#五、Ubuntu 22.04 安装 MySQL)
-
- [5.1 检查系统环境](#5.1 检查系统环境)
- [5.2 更新包管理器](#5.2 更新包管理器)
- [5.3 检查是否有旧版本 MySQL](#5.3 检查是否有旧版本 MySQL)
- [5.4 安装 MySQL Server](#5.4 安装 MySQL Server)
- [5.5 验证安装](#5.5 验证安装)
- [5.6 启动 MySQL 服务](#5.6 启动 MySQL 服务)
- [5.7 设置开机自启](#5.7 设置开机自启)
- [六、首次登录 MySQL](#六、首次登录 MySQL)
-
- [6.1 第一次连接](#6.1 第一次连接)
- [6.2 检查当前用户](#6.2 检查当前用户)
- [6.3 设置 root 密码(可选)](#6.3 设置 root 密码(可选))
- [6.4 退出 MySQL](#6.4 退出 MySQL)
- [七、MySQL 连接命令详解](#七、MySQL 连接命令详解)
-
- [7.1 完整连接语法](#7.1 完整连接语法)
- [7.2 常见连接示例](#7.2 常见连接示例)
- 八、数据库、表与服务器的关系
-
- [8.1 三层架构](#8.1 三层架构)
- [8.2 快速上手示例](#8.2 快速上手示例)
- [九、MySQL 架构简述](#九、MySQL 架构简述)
-
- [9.1 逻辑架构](#9.1 逻辑架构)
- [9.2 跨平台兼容性](#9.2 跨平台兼容性)
- [十、SQL 语言分类](#十、SQL 语言分类)
-
- [10.1 SQL 的四大分类](#10.1 SQL 的四大分类)
-
- [1. DDL(数据定义语言)](#1. DDL(数据定义语言))
- [2. DML(数据操纵语言)](#2. DML(数据操纵语言))
- [3. DQL(数据查询语言)](#3. DQL(数据查询语言))
- [4. DCL(数据控制语言)](#4. DCL(数据控制语言))
- [10.2 SQL 分类在实际开发中的应用](#10.2 SQL 分类在实际开发中的应用)
- 十一、存储引擎
-
- [11.1 什么是存储引擎](#11.1 什么是存储引擎)
- [11.2 查看可用的存储引擎](#11.2 查看可用的存储引擎)
- [11.3 主流存储引擎对比](#11.3 主流存储引擎对比)
- [11.4 InnoDB vs MyISAM 详细对比](#11.4 InnoDB vs MyISAM 详细对比)
- [11.5 查看表使用的存储引擎](#11.5 查看表使用的存储引擎)
- [11.6 修改存储引擎](#11.6 修改存储引擎)
- [十二、MySQL 配置文件详解](#十二、MySQL 配置文件详解)
-
- [12.1 配置文件位置](#12.1 配置文件位置)
- [12.2 查看当前配置](#12.2 查看当前配置)
- [12.3 常见配置项](#12.3 常见配置项)
- [12.4 修改配置文件](#12.4 修改配置文件)
- 十三、总结与下一步
MySQL 从零开始:安装与基础概念
一、前言:为什么需要数据库
💬 核心问题:程序如何存储和管理数据?
🚀 思考:
- 用文件存储数据不就行了吗?为什么还要数据库?
- 数据库和数据库管理系统有什么区别?
- MySQL 在众多数据库中有什么特点?
二、文件存储的缺陷
在深入数据库之前,先理解为什么需要它。用文件保存数据看似简单,但存在几个根本性问题。
2.1 文件存储的四大问题
1. 安全性问题
文件存储在操作系统中,没有访问控制机制。任何有文件访问权限的程序或用户都能随意读取、修改甚至删除数据。如果多个程序同时访问同一个文件,无法保证数据的一致性。举例来说,两个程序同时修改一个文件中的账户余额,可能导致数据混乱。
2. 查询与管理不便
用文件存储数据时,要查找特定内容需要遍历整个文件。如果要统计、排序或关联多个文件的数据,工作量极大。比如从 100 万条用户记录中找出某个城市的用户,用文件处理会非常低效。
3. 海量数据存储
文件的组织方式不适合存储大规模数据。当数据量超过内存大小时,程序的运行效率会急剧下降。文件系统也没有为大数据存储进行优化。
4. 程序控制困难
用文件存储数据时,程序需要自己处理数据的读写、校验、备份等所有逻辑。这大大增加了开发难度和维护成本。如果要实现事务控制(确保一组操作要么全部成功,要么全部失败),文件方式无法支持。
三、什么是数据库
为了解决文件存储的这些问题,专家们设计了数据库。数据库是一个有组织、可控制的数据集合,它提供了统一的接口来安全地存储、检索和管理数据。
3.1 数据库的三个关键特性
| 特性 | 说明 |
|---|---|
| 安全性 | 通过用户权限控制,只有授权用户才能访问数据 |
| 高效查询 | 支持 SQL 语言,快速查询和统计数据 |
| 海量存储 | 能存储 TB 级甚至更大规模的数据,并保持高效访问 |
3.2 数据库的存储介质
数据库的数据最终还是存储在物理介质上,主要有两种:
- 磁盘存储:大容量、低成本、持久化,但速度相对较慢。
- 内存存储:速度快,但容量有限,断电数据丢失。
实际应用中,数据库通常采用磁盘 + 内存的混合方式:热数据存在内存中以提高访问速度,冷数据存在磁盘上以节省成本。
四、主流数据库对比
4.1 主要数据库产品
| 数据库 | 厂商 | 应用场景 | 特点 |
|---|---|---|---|
| MySQL | 甲骨文 | 中小型项目、电商、论坛 | 开源、高并发、易上手,不适合复杂业务逻辑 |
| Oracle | 甲骨文 | 大型项目 | 功能强大、稳定性高、学习成本大、价格昂贵 |
| SQL Server | 微软 | 企业应用、.NET 项目 | Windows 系统优化、与微软技术栈兼容 |
| PostgreSQL | 开源社区 | 学术研究、高可靠应用 | 功能完整、完全免费、并发性能好 |
| SQLite | 开源 | 嵌入式应用、手机 App | 轻量级、无需服务器、占用资源少 |
4.2 为什么选择 MySQL
在这个教程中,我们学习 MySQL 的原因是:
- 世界最流行:全球超过 50% 的网站使用 MySQL,包括 Facebook、Twitter、YouTube 等。
- 入门友好:相比 Oracle 的复杂性,MySQL 学习曲线平缓,适合初学者。
- 高并发性能:特别适合 Web 应用,能处理大量并发请求。
- 校招必考:几乎所有 Java、后端开发的笔试面试都会考 MySQL 基础。
- 开源免费:无需付费,源代码公开,社区活跃。
五、Ubuntu 22.04 安装 MySQL
5.1 检查系统环境
首先确认你的 Ubuntu 版本:
bash
cat /etc/os-release
输出应该包含 Ubuntu 22.04 LTS。
5.2 更新包管理器
在安装任何软件前,先更新系统包列表:
bash
sudo apt update
5.3 检查是否有旧版本 MySQL
如果之前安装过 MySQL 或 MariaDB,需要先清理:
bash
# 检查是否有 MySQL 进程运行
ps aux | grep mysql
# 如果有,停止服务
sudo systemctl stop mysql
# 卸载旧版本
sudo apt remove mysql-server mysql-client mysql-common -y
5.4 安装 MySQL Server
在 Ubuntu 22.04 上,直接使用官方仓库安装 MySQL 8.0:
bash
sudo apt install mysql-server -y
等待安装完成。Ubuntu 官方仓库中的 MySQL 已经是最新的 8.0 版本,比 CentOS 中的 5.7 更稳定。
5.5 验证安装
检查 MySQL 是否正确安装:
bash
mysql --version
输出示例:
bash
mysql Ver 8.0.45-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))
5.6 启动 MySQL 服务
bash
sudo systemctl start mysql
检查服务状态:
bash
sudo systemctl status mysql
输出应该显示 active (running)。
5.7 设置开机自启
这样每次重启系统时 MySQL 会自动启动:
bash
sudo systemctl enable mysql
六、首次登录 MySQL
6.1 第一次连接
在 Ubuntu 22.04 中,MySQL 8.0 的 root 用户初始状态是没有密码的。直接登录:
bash
sudo mysql -u root
如果输出以下类似内容,说明登录成功:
bash
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.45-0ubuntu0.22.04.1 (Ubuntu)
Copyright (c) 2000, 2026, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
6.2 检查当前用户
在 MySQL 命令行中,输入:
sql
SELECT user, host FROM mysql.user;
这会显示数据库中所有的用户及其可以连接的主机。
6.3 设置 root 密码(可选)
虽然初期学习不需要密码,但为了安全起见,建议设置一个:
sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
将 your_password 替换为你的密码。
6.4 退出 MySQL
输入 exit 或 quit 退出 MySQL 命令行:
sql
exit;
七、MySQL 连接命令详解
7.1 完整连接语法
bash
mysql -h <host> -P <port> -u <username> -p
各参数说明:
| 参数 | 说明 | 默认值 |
|---|---|---|
-h |
服务器地址 | 127.0.0.1(本地) |
-P |
服务器端口 | 3306 |
-u |
用户名 | root |
-p |
密码(后面接密码或交互输入) | 无 |
7.2 常见连接示例
本地连接(使用默认值):
bash
mysql -u root -p
输入密码后按回车。
指定主机和端口:
bash
mysql -h 10.2.0.12 -P 3306 -u root -p
不提示输入密码(直接写在命令中,不推荐用于生产环境):
bash
mysql -u root -pYourPassword
注意:-p 后面直接跟密码,中间没有空格。
八、数据库、表与服务器的关系
8.1 三层架构
MySQL 采用三层架构来组织数据:
bash
[MySQL Server 数据库服务器]
↓
[多个 Database(数据库)]
↓
[每个数据库包含多个 Table(表)]
↓
[每个表包含多行数据]
数据库服务器:安装在机器上的 MySQL 程序,负责管理所有数据库。一个服务器可以管理多个数据库。
数据库 :一个逻辑容器,用来组织相关的表。通常为每个应用创建一个数据库。比如,一个电商系统可能有 shop_db 数据库。
表:数据库中的基本存储单位,以行和列的形式存储数据。类似于 Excel 表格。
8.2 快速上手示例
现在通过一个简单的例子,体验数据库的基本操作。登录 MySQL 后,输入以下命令:
创建数据库:
sql
CREATE DATABASE helloworld;
切换到这个数据库:
sql
USE helloworld;
创建表:
sql
CREATE TABLE student (
id INT,
name VARCHAR(32),
gender VARCHAR(2)
);
插入数据:
sql
INSERT INTO student (id, name, gender) VALUES (1, '张三', '男');
INSERT INTO student (id, name, gender) VALUES (2, '李四', '女');
INSERT INTO student (id, name, gender) VALUES (3, '王五', '男');
查询数据:
sql
SELECT * FROM student;
输出结果:
bash
+------+------+--------+
| id | name | gender |
+------+------+--------+
| 1 | 张三 | 男 |
| 2 | 李四 | 女 |
| 3 | 王五 | 男 |
+------+------+--------+
九、MySQL 架构简述
9.1 逻辑架构

MySQL 采用 C/S(客户端-服务器) 架构。客户端(如 mysql 命令行工具)通过 TCP 连接向服务器发送 SQL 语句,服务器接收、解析、执行后返回结果。
bash
[客户端 mysql CLI]
↓ (SQL 语句)
[MySQL Server]
↓ (处理流程)
1. 连接认证
2. SQL 解析
3. 优化执行
4. 调用存储引擎
↓ (返回结果)
[客户端展示结果]
9.2 跨平台兼容性
MySQL 的代码用 C 语言编写,具有良好的可移植性,支持几乎所有操作系统:
- Linux / Unix
- Windows
- macOS
- Solaris
无论在哪个平台上运行,MySQL 的行为和命令语法都是一致的。
十、SQL 语言分类
10.1 SQL 的四大分类
SQL(Structured Query Language,结构化查询语言)是操作数据库的标准语言。根据功能不同,SQL 分为四大类:
1. DDL(数据定义语言)
Data Definition Language:用来定义和维护数据库对象的结构。
| 命令 | 功能 |
|---|---|
CREATE |
创建数据库、表、索引等 |
ALTER |
修改数据库、表的结构 |
DROP |
删除数据库、表等对象 |
TRUNCATE |
清空表中数据(保留表结构) |
示例:
sql
CREATE TABLE users (id INT, name VARCHAR(50));
ALTER TABLE users ADD age INT;
DROP TABLE users;
2. DML(数据操纵语言)
Data Manipulation Language:用来操作表中的数据。
| 命令 | 功能 |
|---|---|
INSERT |
向表中插入新数据 |
UPDATE |
修改表中的数据 |
DELETE |
删除表中的数据 |
示例:
sql
INSERT INTO users (id, name) VALUES (1, 'Alice');
UPDATE users SET name = 'Bob' WHERE id = 1;
DELETE FROM users WHERE id = 1;
3. DQL(数据查询语言)
Data Query Language:用来查询数据。虽然严格来说 DQL 是 DML 的一部分,但因为查询操作最常用,通常单独列出。
| 命令 | 功能 |
|---|---|
SELECT |
查询表中的数据 |
示例:
sql
SELECT * FROM users;
SELECT name FROM users WHERE id = 1;
4. DCL(数据控制语言)
Data Control Language:用来控制用户权限和事务。
| 命令 | 功能 |
|---|---|
GRANT |
授予用户权限 |
REVOKE |
撤销用户权限 |
COMMIT |
提交事务 |
ROLLBACK |
回滚事务 |
示例:
sql
GRANT SELECT ON database.* TO 'user'@'localhost';
REVOKE SELECT ON database.* FROM 'user'@'localhost';
COMMIT;
ROLLBACK;
10.2 SQL 分类在实际开发中的应用
- 系统管理员:主要使用 DDL 和 DCL,创建数据库、管理用户权限。
- 应用开发者:主要使用 DML 和 DQL,增删改查数据。
- 数据库优化人员:需要理解所有四类,进行性能调优。
十一、存储引擎
11.1 什么是存储引擎
存储引擎 是 MySQL 的核心组件,负责具体实现数据的存储方式、索引机制和查询性能。MySQL 采用插件式架构,支持多种存储引擎,用户可以根据应用场景选择合适的引擎。
11.2 查看可用的存储引擎
登录 MySQL 后,运行:
sql
SHOW ENGINES;
输出示例(Ubuntu 22.04 MySQL 8.0):

11.3 主流存储引擎对比
| 特性 | InnoDB | MyISAM | MEMORY |
|---|---|---|---|
| 事务支持 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
| 行级锁 | ✅ 是 | ❌ 表级锁 | ❌ 表级锁 |
| 崩溃恢复 | ✅ 好 | ❌ 差 | ❌ 数据丢失 |
| 外键支持 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
| 存储位置 | 磁盘 | 磁盘 | 内存 |
| 查询速度 | 较快 | 快(无事务开销) | 极快 |
| 使用场景 | 大多数应用 | 读多写少 | 临时表、缓存 |
11.4 InnoDB vs MyISAM 详细对比
InnoDB(推荐)
特点:
- 支持事务,确保数据的一致性和完整性。
- 行级锁,多个用户可以同时修改不同行的数据,并发性强。
- 自动崩溃恢复,服务器意外宕机时能恢复数据。
- 支持外键约束,适合复杂的数据关系。
应用场景:
- 绝大多数生产环境应用。
- 需要数据可靠性的应用。
- 高并发场景。
MyISAM
特点:
- 不支持事务,性能比 InnoDB 略快。
- 表级锁,一个用户写入时,其他用户必须等待。
- 适合读多写少的场景。
- 不支持外键。
应用场景:
- 仅查询的表(如日志表)。
- 旧版本遗留系统。
MEMORY
特点:
- 数据存储在内存中,速度最快。
- 数据库关闭或系统重启时数据丢失。
- 表的大小受内存限制。
应用场景:
- 临时数据表。
- 会话数据。
- 高速缓存。
11.5 查看表使用的存储引擎
sql
SHOW CREATE TABLE table_name;
或者:
sql
SHOW TABLE STATUS LIKE 'table_name'\G
11.6 修改存储引擎
sql
ALTER TABLE table_name ENGINE = InnoDB;
从 MySQL 5.5.5 开始,InnoDB 成为默认存储引擎,新建表会自动使用 InnoDB。
十二、MySQL 配置文件详解
12.1 配置文件位置
在 Ubuntu 22.04 中,MySQL 的主配置文件通常是:
bash
/etc/mysql/mysql.conf.d/mysqld.cnf
你也可以查看所有配置文件:
bash
sudo ls -la /etc/mysql/
12.2 查看当前配置
bash
sudo cat /etc/mysql/mysql.conf.d/mysqld.cnf
12.3 常见配置项
| 配置项 | 说明 | 示例值 |
|---|---|---|
port |
MySQL 服务端口 | 3306 |
datadir |
数据存储目录 | /var/lib/mysql |
socket |
Unix socket 文件位置 | /var/run/mysqld/mysqld.sock |
character_set_server |
默认字符集 | utf8mb4 |
default_storage_engine |
默认存储引擎 | InnoDB |
max_connections |
最大连接数 | 151 |
12.4 修改配置文件
如需修改配置,使用编辑器打开配置文件:
bash
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
修改后保存,重启 MySQL 服务生效:
bash
sudo systemctl restart mysql
十三、总结与下一步
现在你已经掌握了:
✅ 环境搭建:在 Ubuntu 22.04 上安装并启动 MySQL 8.0
✅ 基础概念:理解数据库、表、存储引擎的含义
✅ SQL 语言:了解 DDL、DML、DQL、DCL 的区别
✅ 实际操作:能创建数据库、表,插入和查询数据
下一篇,我们将深入学习如何操作