MySQL: MySQL简介与数据库基础概念
MySQL 是全球最流行的开源关系型数据库管理系统——它让数据存储和查询变得简单高效。
本教程面向零基础学习者,从数据库概念讲起,直到你能熟练使用 MySQL 进行数据管理。
1. 你将学到
- 什么是数据库以及为什么需要数据库
- 关系型数据库与非关系型数据库的区别
- MySQL 的发展历史和版本演进
- MySQL 的核心优势和应用场景
- MySQL 的安装与连接基础
2. 一个开发者的真实故事
(1) 痛点:Excel 撑不住了
一个电商运营经理接到紧急任务:
"统计过去 12 个月、5,000 个客户、30,000 个订单的销售趋势——明天早上给 CEO 做汇报。"
打开 Excel 文件:100,000+ 行数据,文件大小 50 MB。
问题接踵而来:
- Excel 打开要 3 分钟,每次筛选都卡顿
- 想关联"客户表"和"订单表",VLOOKUP 写到崩溃
- 数据更新了,但报表不会自动刷新
- 3 个同事同时编辑?文件冲突,数据丢失
(2) 数据库的解法
用 MySQL 重新设计:
SQL
-- 创建客户表
CREATE TABLE customers (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
email VARCHAR(150)
);
-- 创建订单表
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT,
amount DECIMAL(10,2),
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
-- 一条 SQL 查出年度销售趋势
SELECT
DATE_FORMAT(order_date, '%Y-%m') AS month,
COUNT(*) AS total_orders,
SUM(amount) AS total_revenue
FROM orders
WHERE order_date >= '2025-07-01'
GROUP BY month
ORDER BY month;
收益对比:
| 维度 | Excel | MySQL |
|---|---|---|
| 10 万行查询 | 30+ 秒 | < 1 秒 |
| 多表关联 | VLOOKUP 手写 | JOIN 自动关联 |
| 多人协作 | 文件冲突 | 并发读写无冲突 |
| 数据更新 | 手动刷新 | 实时查询最新数据 |
| 数据安全 | 文件丢失风险 | 事务+备份保障 |
3. 什么是数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
(1) 数据库 vs 文件存储
graph TB
A[数据存储方式] --> B[文件存储]
A --> C[数据库]
B --> D[Excel / CSV / TXT]
B --> E[手动管理,效率低]
C --> F[结构化存储]
C --> G[高效查询,安全可靠]
| 维度 | 文件存储 | 数据库 |
|---|---|---|
| 数据量 | 千级行 | 百万~亿级行 |
| 查询速度 | 慢(全文件扫描) | 快(索引优化) |
| 并发访问 | 不支持 | 支持多用户同时读写 |
| 数据完整性 | 无保障 | 约束+事务保障 |
| 安全性 | 文件级 | 用户权限+加密 |
(2) 数据库分类
graph TB
A[数据库] --> B[关系型数据库 RDBMS]
A --> C[非关系型数据库 NoSQL]
B --> D[MySQL / PostgreSQL]
B --> E[Oracle / SQL Server]
B --> F[SQLite]
C --> G[键值型: Redis]
C --> H[文档型: MongoDB]
C --> I[列族型: Cassandra]
C --> J[图数据库: Neo4j]
| 类型 | 代表产品 | 数据模型 | 适用场景 |
|---|---|---|---|
| 关系型 | MySQL, PostgreSQL | 表(行+列) | 结构化数据、事务处理 |
| 键值型 | Redis | Key-Value 对 | 缓存、会话、排行榜 |
| 文档型 | MongoDB | JSON/BSON 文档 | 半结构化数据、内容管理 |
| 列族型 | Cassandra | 列族 | 大数据分析、时序数据 |
| 图数据库 | Neo4j | 节点+边 | 社交网络、推荐系统 |
💡 提示: MySQL 属于关系型数据库,数据以表(Table)的形式存储,表与表之间可以建立关系。
4. 关系型数据库核心概念
(1) 表(Table)
表是数据库中存储数据的基本单位,由行(Row)和列(Column)组成。
graph LR
subgraph customers 表
direction TB
H[id | name | email | created_at]
R1[1 | Alice | alice@email.com | 2025-01-15]
R2[2 | Bob | bob@email.com | 2025-02-20]
R3[3 | Charlie | charlie@email.com | 2025-03-10]
end
| 术语 | 含义 | 示例 |
|---|---|---|
| 表(Table) | 数据的集合 | customers 表 |
| 行(Row) | 一条具体记录 | Alice 的完整信息 |
| 列(Column) | 数据的一个属性 | name 列 |
| 主键(Primary Key) | 唯一标识每行的字段 | id 列 |
| 外键(Foreign Key) | 关联其他表的字段 | orders.customer_id |
(2) 关系类型
erDiagram
CUSTOMERS ||--o{ ORDERS : "一个客户有多个订单"
ORDERS ||--|{ ORDER_ITEMS : "一个订单有多个商品项"
PRODUCTS ||--o{ ORDER_ITEMS : "一个商品出现在多个订单中"
| 关系类型 | 说明 | 示例 |
|---|---|---|
| 一对一(1:1) | 一条记录对应另一条记录 | 用户 ↔ 身份证 |
| 一对多(1:N) | 一条记录对应多条记录 | 客户 → 订单 |
| 多对多(M:N) | 多条记录相互对应 | 学生 ↔ 课程(通过选课表) |
(3) SQL 语言分类
SQL(Structured Query Language)是操作关系型数据库的标准语言。
| 分类 | 全称 | 关键字 | 用途 |
|---|---|---|---|
| DDL | Data Definition Language | CREATE/ALTER/DROP | 定义数据库结构 |
| DML | Data Manipulation Language | INSERT/UPDATE/DELETE | 增删改数据 |
| DQL | Data Query Language | SELECT | 查询数据 |
| DCL | Data Control Language | GRANT/REVOKE | 权限管理 |
| TCL | Transaction Control Language | COMMIT/ROLLBACK | 事务控制 |
5. MySQL 的发展历史
(1) 版本演进
timeline
title MySQL 版本演进
1995 : MySQL 1.0 发布
: 由瑞典 MySQL AB 公司开发
2000 : MySQL 3.23
: 支持事务处理
2003 : MySQL 4.0
: 支持 UNION 查询
2005 : MySQL 5.0
: 支持存储过程、视图、触发器
2008 : Sun 收购 MySQL AB
2010 : Oracle 收购 Sun
: 获得 MySQL 所有权
2013 : MySQL 5.6
: InnoDB 全文搜索
2016 : MySQL 5.7
: JSON 支持、性能提升
2018 : MySQL 8.0
: 窗口函数、CTE、角色
2024 : MySQL 8.4 LTS
: 长期支持版本
2024 : MySQL 9.0 Innovation
: 最新创新版本
(2) MySQL 的设计哲学
MySQL 的核心设计理念:
简单优先
- 安装配置简单,学习曲线平缓
- 语法直观,接近自然语言
性能优先
- 读取速度极快,适合读多写少场景
- InnoDB 存储引擎提供高性能事务处理
开放生态
- 开源免费(GPL 协议)
- 丰富的第三方工具和驱动
6. MySQL 的核心优势
(1) 优势对比
| 维度 | MySQL | PostgreSQL | Oracle | SQL Server |
|---|---|---|---|---|
| 价格 | 免费(开源) | 免费(开源) | 昂贵(商业) | 昂贵(商业) |
| 学习难度 | ⭐ 简单 | ⭐⭐ 中等 | ⭐⭐⭐ 难 | ⭐⭐ 中等 |
| 读取性能 | ⭐⭐⭐ 极快 | ⭐⭐ 快 | ⭐⭐ 快 | ⭐⭐ 快 |
| 社区活跃度 | ⭐⭐⭐ 极高 | ⭐⭐ 高 | ⭐ 中等 | ⭐ 中等 |
| 适用场景 | Web 应用、电商 | 复杂查询、GIS | 企业级大系统 | Windows 生态 |
(2) 典型应用场景
mindmap
root((MySQL 应用))
Web 开发
博客系统
电商平台
社交网络
内容管理
企业应用
ERP 系统
CRM 系统
库存管理
订单处理
数据分析
日志存储
用户行为
报表统计
移动应用
App 后端
游戏数据
推送系统
谁在用 MySQL?
| 公司 | 用途 |
|---|---|
| Meta (Facebook) | 用户数据、社交图谱 |
| 推文、用户信息 | |
| GitHub | 代码仓库、用户数据 |
| Airbnb | 房源、订单、用户 |
| Shopify | 电商后端、商品订单 |
| Booking.com | 酒店预订、用户评价 |
7. 快速体验 MySQL
(1) 三步连接 MySQL
| 步骤 | 命令/操作 |
|---|---|
| 1. 安装 | Docker 一行启动(详见第 2 课) |
| 2. 连接 | mysql -u root -p |
| 3. 验证 | SELECT VERSION(); |
📖 下一课将详细讲解:全平台安装(Windows/Mac/Linux/Docker)、MySQL Workbench 连接、安全配置。本节只做快速体验。
▶ 示例:Docker 一行启动
BASH
# 拉取并启动 MySQL 8.0(详细参数说明见第 2 课)
docker run -d --name mysql-tutorial \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=MyPass123! \
mysql:8.0
# 进入 MySQL 命令行
docker exec -it mysql-tutorial mysql -u root -pMyPass123!
▶ 示例:连接后快速验证
SQL
-- 查看 MySQL 版本
SELECT VERSION();
-- 查看所有数据库
SHOW DATABASES;
输出:
TEXT
📖 仅展示
+-----------+
| VERSION() |
+-----------+
| 8.0.36 |
+-----------+
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
▶ 示例:创建第一个数据库和表
SQL
-- 1. 创建数据库
CREATE DATABASE my_first_db;
-- 2. 使用数据库
USE my_first_db;
-- 3. 创建用户表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 4. 插入数据
INSERT INTO users (username, email) VALUES ('Alice', 'alice@example.com');
INSERT INTO users (username, email) VALUES ('Bob', 'bob@example.com');
-- 5. 查询数据
SELECT * FROM users;
输出:
TEXT
📖 仅展示
+----+----------+-----------------+---------------------+
| id | username | email | created_at |
+----+----------+-----------------+---------------------+
| 1 | Alice | alice@example.com | 2026-07-03 10:30:00 |
| 2 | Bob | bob@example.com | 2026-07-03 10:30:01 |
+----+----------+-----------------+---------------------+
▶ 示例:数据的增删改查
SQL
-- 条件查询
SELECT username, email FROM users WHERE username = 'Alice';
-- 更新数据
UPDATE users SET email = 'alice_new@example.com' WHERE id = 1;
-- 删除数据
DELETE FROM users WHERE id = 2;
-- 统计用户数
SELECT COUNT(*) AS total_users FROM users;
❓ 常见问题
Q MySQL 和 SQL 是什么关系?
A SQL 是操作数据库的标准语言(类似"英语"),MySQL 是实现 SQL 标准的数据库软件(类似"英国人说的英语")。
Q MySQL 免费吗?可以商用吗?
A MySQL 社区版是免费开源的(GPL 协议),可以商用。但如果你修改了 MySQL 源码并分发,也需要开源。Oracle 提供商业版(付费),提供更多企业功能。
Q MySQL 和 MariaDB 选哪个?
A MariaDB 是 MySQL 的分支,语法高度兼容。对于新项目,MySQL 8.0+ 是主流选择;如果你担心 Oracle 的开源策略,MariaDB 是不错的替代。
Q 学 MySQL 需要先学编程语言吗?
A 不需要。SQL 是独立的语言,语法接近自然英语。你可以直接在 MySQL 命令行中学习。后续课程会介绍如何用 Node.js/Python 连接 MySQL。
Q MySQL 适合什么规模的项目?
A MySQL 适合从小型个人项目到大型企业应用。单表可存储数亿行数据,配合分库分表可支撑更大规模。Meta/Twitter/GitHub 都在用 MySQL。
Q Windows/Mac/Linux 都能用 MySQL 吗?
A 是的。MySQL 官方提供全平台支持。推荐用 Docker 安装,一次配置,到处运行。
📖 小节
- 数据库是按照数据结构组织、存储和管理数据的仓库
- 关系型数据库以表(行+列)的形式存储数据,支持表间关系
- SQL 是操作关系型数据库的标准语言,分为 DDL/DML/DQL/DCL/TCL 五类
- MySQL 是全球最流行的开源关系型数据库,简单、快速、免费
- MySQL 8.0+ 是当前主流版本,支持窗口函数、JSON、角色等新特性
- Docker 是学习 MySQL 最简单的安装方式
📝 作业
-
基础题(难度⭐):使用 Docker 安装 MySQL 8.0,连接成功后执行
SELECT VERSION();查看版本号。 -
进阶题(难度⭐⭐):创建一个名为
school的数据库,包含students表(id, name, age, grade),插入 5 条数据并查询所有记录。 -
挑战题(难度⭐⭐⭐):创建
courses表和student_courses关联表(多对多关系),设计合理的字段,并用 JOIN 查询某个学生选修的所有课程。