# MySQL 数据库基础入门:通俗版学习指南
> MySQL 是最流行的开源关系型数据库,掌握它是后端开发的必备技能。本文用通俗的语言讲解 MySQL 核心概念和常用操作,帮你快速入门。
---
## 一、数据库是什么?
### 一句话理解
> 数据库 = 一个"更聪明的 Excel"
| 特点 | Excel | MySQL |
|------|-------|-------|
| 数据量 | 适合小数据 | 支持海量数据 |
| 并发 | 单人使用 | 多人同时使用 |
| 查询 | 手动筛选 | 用 SQL 快速查找 |
| 安全 | 无权限控制 | 有权限管理 |
### 核心特点
- 持久化:数据存在磁盘中,断电不会丢失
- 高效查询:用 SQL 语言快速找数据
- 安全性:权限控制,避免数据乱改
### 数据库分类
| 类型 | 特点 | 代表产品 |
|------|------|----------|
| 关系型数据库(RDBMS) | 数据放在二维表中 | MySQL、Oracle、SQL Server |
| 非关系型数据库(NoSQL) | 灵活的数据模型 | Redis、MongoDB |
> 💡 Web 项目里:MySQL 常用来存用户、订单、商品等数据
---
## 二、MySQL 基本操作
### 登录 / 退出
```bash
# 登录
mysql -u 用户名 -p
# 退出
exit;
```
### 查看 / 使用数据库
```sql
-- 查看所有数据库
SHOW DATABASES;
-- 进入某一个数据库
USE db_name;
```
> 👉 先 USE,后面所有操作才知道你在哪个库
### 创建 / 删除数据库
```sql
-- 创建数据库(utf8mb4 支持中文 + emoji)
CREATE DATABASE test_db DEFAULT CHARSET utf8mb4;
-- 删除数据库(不可恢复!)
DROP DATABASE test_db;
```
---
## 三、表(Table)基础
### 表是什么
| 概念 | Excel 对应 |
|------|-----------|
| 表(Table) | 整个表格 |
| 行(Row) | 一条数据(一个用户) |
| 列(Column) | 字段(用户名、年龄) |
### 常见数据类型
#### 数值类型
```sql
INT -- 整数(最常用)
DECIMAL -- 精确小数(金额一定用它!)
```
#### 字符串类型
```sql
VARCHAR(n) -- 最常用,长度灵活
CHAR(n) -- 固定长度(很少用)
TEXT -- 大文本
```
#### 日期时间类型
```sql
DATETIME -- 最常用:创建时间、下单时间
DATE -- 日期
TIME -- 时间
```
---
## 四、DDL(表结构操作)
> 👉 DDL = 对"表结构"动手
### 创建表
```sql
CREATE TABLE user (
id INT,
username VARCHAR(50),
age INT,
created_at DATETIME
);
```
> 这里只是定义"表长什么样",还没数据
### 查看表结构
```sql
-- 快速看字段
DESC user;
-- 看完整建表语句
SHOW CREATE TABLE user;
```
### 修改表
```sql
-- 添加字段
ALTER TABLE user ADD email VARCHAR(100);
-- 删除字段
ALTER TABLE user DROP email;
```
---
## 五、DML(数据操作)
> 👉 DML = 对"表里的数据"动手
### 插入数据
```sql
-- 推荐写法(指定字段名)
INSERT INTO user (username, age)
VALUES ('tom', 20);
```
> 💡 推荐写字段名,防止顺序出错
### 修改数据
```sql
UPDATE user SET age = 21 WHERE username = 'tom';
```
> ⚠️ 危险:没有 WHERE = 全表修改!
### 删除数据
```sql
DELETE FROM user WHERE id = 1;
```
---
## 六、查询(DQL)⭐ 重点!
> 👉 实际开发 90% 时间在写 SELECT
### 基本查询
```sql
-- 查全部
SELECT * FROM user;
-- 查指定列
SELECT username, age FROM user;
```
### 条件查询
```sql
SELECT * FROM user WHERE age > 18;
```
常用条件:
| 条件 | 说明 |
|------|------|
| = | 精确匹配 |
| BETWEEN | 范围(如 BETWEEN 18 AND 30) |
| IN | 多选(如 IN (1, 2, 3)) |
| IS NULL | 判断空值 |
### 模糊查询
```sql
-- % 表示任意多个字符
SELECT * FROM user WHERE username LIKE 't%'; -- 以 t 开头
SELECT * FROM user WHERE username LIKE '%t%'; -- 包含 t
```
### 排序 + 分页(固定写法!)
```sql
-- 按年龄降序,取前10条
SELECT * FROM user
ORDER BY age DESC
LIMIT 0, 10;
```
> 👉 分页固定写法,面试常问LIMIT 起始位置, 每页条数
---
## 七、聚合与分组
> 👉 用来"做统计"
```sql
-- 按年龄分组,统计每个年龄的人数
SELECT age, COUNT(*)
FROM user
GROUP BY age
HAVING COUNT(*) > 1;
```
| 关键字 | 作用 |
|--------|------|
| WHERE | 分组前过滤 |
| HAVING | 分组后过滤 |
---
## 八、约束(非常重要!)
> 👉 约束 = 给表加规则,防止脏数据
```sql
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键 + 自增
username VARCHAR(50) NOT NULL, -- 非空
email VARCHAR(100) UNIQUE, -- 唯一
status INT DEFAULT 1 -- 默认值
);
```
| 约束 | 作用 |
|------|------|
| PRIMARY KEY | 主键:唯一 + 非空 |
| AUTO_INCREMENT | 自增:不用手动传 id |
| NOT NULL | 必须有值 |
| UNIQUE | 不能重复 |
| DEFAULT | 默认值 |
---
## 九、多表关系(理解即可)
| 关系 | 示例 |
|------|------|
| 一对多 | 用户 → 订单(最常见) |
| 多对多 | 学生 → 课程 |
| 一对一 | 用户 → 用户详情 |
```sql
-- 一对多关系
user(id) → orders(user_id)
```
---
## 十、多表查询(JOIN)⭐
```sql
-- 左连接:左表全保留(最常用)
SELECT u.username, o.id
FROM user u
LEFT JOIN orders o ON u.id = o.user_id;
```
| 连接类型 | 说明 |
|----------|------|
| LEFT JOIN | 左表全保留 |
| RIGHT JOIN | 右表全保留 |
| INNER JOIN | 只保留匹配的 |
---
## 十一、子查询
> 👉 一个查询的结果,作为另一个查询的条件
```sql
-- 查询有订单的用户
SELECT * FROM user
WHERE id IN (SELECT user_id FROM orders);
```
---
## 十二、视图(了解)
> 👉 视图 = 保存好的 SQL(不存数据)
```sql
-- 创建视图
CREATE VIEW v_user AS
SELECT id, username FROM user;
-- 使用视图
SELECT * FROM v_user;
```
---
## 十三、备份
```bash
# 备份数据库
mysqldump -u username -p database_name > backup_file.sql
# 恢复数据库
mysql -u username -p database_name < backup_file.sql
```
---
## 学习建议
1. 先掌握基础:DDL、DML、DQL 是核心
2. 多练习 SELECT:实际开发 90% 时间在写查询
3. 注意 WHERE 条件:UPDATE 和 DELETE 一定要带 WHERE!
4. 理解约束:主键、唯一、非空是设计表的基础
5. 分页固定写法ORDER BY ... LIMIT ... 面试常考
---
## 下一步学习路径
到这里为止,就是 MySQL 入门必须掌握的内容:
1️⃣ 索引(B+Tree,面试重点)
2️⃣ 事务(ACID 特性)
3️⃣ 锁
4️⃣ SQL 优化