MySQL 超详细完整版知识点手册
这份手册从零开始、全网最细、无死角覆盖,适合完全新手自学、复习、面试,直接跟着学就能掌握 MySQL 全套能力。
一、MySQL 基础认知
1. 什么是 MySQL
- 开源关系型数据库管理系统(RDBMS)
- 用表(table)存储数据,行=记录,列=字段
- 最流行的 Web 后端数据库,搭配 PHP/Java/Python 等使用
2. 数据库核心概念
- 数据库(DB):存储数据的仓库
- 数据表(Table):数据库中真正存数据的结构
- 行(Row):一条完整数据
- 列(Column):数据的属性(如姓名、年龄)
- 主键(Primary Key):唯一标识一行数据,不能为空、不能重复
- 外键(Foreign Key):关联其他表的主键,建立表关系
3. MySQL 安装与连接
- Windows/Linux/mac 安装方式
- 服务启动/停止:
net start mysql # Windows
systemctl start mysqld # Linux
- 登录命令:
mysql -u root -p
- 退出:
exit或quit
二、SQL 语言分类(必须背会)
所有 MySQL 操作都属于这 4 类:
-
DDL 数据定义语言 定义库、表结构
CREATEALTERDROPTRUNCATE -
DML 数据操作语言 增删改数据
INSERTUPDATEDELETE -
DQL 数据查询语言 查询数据(最重要)
SELECT -
DCL 数据控制语言 权限管理
GRANTREVOKE
三、库操作(DDL)
1. 创建数据库
CREATE DATABASE 库名;
CREATE DATABASE IF NOT EXISTS 库名; # 安全写法
CREATE DATABASE 库名 CHARACTER SET utf8mb4; # 指定字符集
2. 删除数据库
DROP DATABASE 库名;
DROP DATABASE IF EXISTS 库名;
3. 使用数据库
USE 库名;
4. 查看所有库
SHOW DATABASES;
四、数据表操作(DDL)
1. 数据类型(超级重要)
(1)数值类型
INT整数BIGINT长整数FLOAT/DOUBLE浮点数DECIMAL(m,n)高精度小数(金额必须用这个)
(2)字符串类型
VARCHAR(n)可变长度字符串(最常用)CHAR(n)固定长度TEXT长文本ENUM枚举
(3)日期类型
DATE:年月日2025-01-01TIME:时分秒DATETIME:年月日时分秒(常用)TIMESTAMP:时间戳
2. 创建表(标准模板)
CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT, # 主键自增
name VARCHAR(20) NOT NULL, # 非空
age INT,
gender ENUM('男','女'),
create_time DATETIME DEFAULT NOW() # 默认当前时间
);
3. 查看表结构
DESC 表名;
4. 修改表(ALTER)
# 添加列
ALTER TABLE 表 ADD COLUMN 列名 类型;
# 修改列类型
ALTER TABLE 表 MODIFY COLUMN 列名 新类型;
# 修改列名
ALTER TABLE 表 CHANGE 旧名 新名 类型;
# 删除列
ALTER TABLE 表 DROP COLUMN 列名;
# 修改表名
RENAME TABLE 旧表名 TO 新表名;
5. 删除表
DROP TABLE 表名;
6. 清空表数据(保留结构)
TRUNCATE TABLE 表名;
五、数据增删改(DML)
1. 插入数据 INSERT
# 全列插入
INSERT INTO 表 VALUES(值1,值2,值3);
# 指定列插入(推荐)
INSERT INTO 表(列1,列2) VALUES(值1,值2);
# 批量插入
INSERT INTO 表(列1,列2) VALUES
(1,'a'),
(2,'b'),
(3,'c');
2. 修改数据 UPDATE
UPDATE 表 SET 列1=值1,列2=值2 WHERE 条件;
⚠️ 必须加 WHERE,否则全表修改!
3. 删除数据 DELETE
DELETE FROM 表 WHERE 条件;
⚠️ 必须加 WHERE,否则全表删除!
六、数据查询(DQL)—— MySQL 核心
1. 基础查询
SELECT * FROM 表; # 查询所有列
SELECT 列1,列2 FROM 表; # 查询指定列
SELECT DISTINCT 列 FROM 表; # 去重
2. 条件查询 WHERE
SELECT * FROM 表 WHERE 条件;
常用运算符:
=等于!=<>不等于> < >= <=BETWEEN ... AND ...区间IN(值1,值2)在列表中LIKE模糊查询IS NULL/IS NOT NULL
模糊查询:
WHERE name LIKE '张%' # 张开头
WHERE name LIKE '%三' # 三结尾
WHERE name LIKE '%张%' # 包含张
3. 排序 ORDER BY
SELECT * FROM 表 ORDER BY 列 ASC/DESC;
ASC升序(默认)DESC降序
4. 分页 LIMIT
SELECT * FROM 表 LIMIT 起始行, 条数;
示例:
SELECT * FROM student LIMIT 0,5; # 第1页 5条
5. 聚合函数
COUNT() 统计数量
SUM() 求和
AVG() 平均值
MAX() 最大值
MIN() 最小值
示例:
SELECT COUNT(*) FROM student;
SELECT AVG(age) FROM student;
6. 分组 GROUP BY + HAVING
SELECT 列,聚合函数 FROM 表
GROUP BY 分组列
HAVING 分组后条件;
⚠️ WHERE 分组前过滤
⚠️ HAVING 分组后过滤
七、多表查询(重点难点)
1. 表关系
- 一对一
- 一对多(最常用)
- 多对多
2. 连接查询
(1)内连接 INNER JOIN
只查两张表匹配的数据
SELECT * FROM A
INNER JOIN B ON A.外键 = B.主键;
(2)左连接 LEFT JOIN
以左表为主,显示左表全部数据,右表没有则为 NULL
SELECT * FROM A
LEFT JOIN B ON A.外键 = B.主键;
(3)右连接 RIGHT JOIN
以右表为主
3. 子查询
一个查询嵌套在另一个查询里
SELECT * FROM student
WHERE class_id = (SELECT id FROM class WHERE name='一班');
4. 联合查询 UNION
合并多个查询结果
SELECT ... UNION SELECT ...
八、约束(CONSTRAINT)
1. 主键约束 PRIMARY KEY
唯一、非空、一张表只能一个
2. 非空约束 NOT NULL
值不能为空
3. 唯一约束 UNIQUE
值不能重复
4. 默认值 DEFAULT
插入不赋值时自动使用默认值
5. 外键约束 FOREIGN KEY
建立表与表之间的关系
FOREIGN KEY(外键列) REFERENCES 主表(主键)
九、事务(Transaction)
1. 什么是事务
一组操作要么全部成功,要么全部失败
2. 四大特性 ACID
- 原子性:不可分割
- 一致性:数据前后一致
- 隔离性:事务之间互不干扰
- 持久性:一旦提交永久生效
3. 事务命令
START TRANSACTION; # 开启事务
SAVEPOINT 点1; # 保存点
ROLLBACK; # 回滚
COMMIT; # 提交
4. 事务隔离级别(面试必问)
- READ UNCOMMITTED
- READ COMMITTED(默认)
- REPEATABLE READ
- SERIALIZABLE
十、索引(Index)—— 优化核心
1. 索引作用
加快查询速度,类似书的目录
2. 索引分类
- 普通索引
- 唯一索引
- 主键索引
- 复合索引
- 全文索引
3. 创建索引
CREATE INDEX 索引名 ON 表(列名);
4. 查看索引
SHOW INDEX FROM 表;
5. 删除索引
DROP INDEX 索引名 ON 表;
6. 索引使用原则
- 经常查询的列加索引
- 不要在小表建索引
- 不要过度索引
LIKE '%xxx'无法使用索引
十一、视图(VIEW)
1. 视图是什么
虚拟表,不存数据,只存查询 SQL
2. 创建视图
CREATE VIEW 视图名 AS
SELECT ... 查询语句;
3. 使用视图
SELECT * FROM 视图名;
十二、存储过程与函数
1. 存储过程
封装多条 SQL,可重复调用
DELIMITER //
CREATE PROCEDURE 名称()
BEGIN
SQL语句;
END //
DELIMITER ;
调用:
CALL 名称();
2. 函数
有返回值
CREATE FUNCTION 名称() RETURNS 类型
BEGIN
RETURN 值;
END
十三、MySQL 高级优化
1. 慢查询优化
- 查看慢查询日志
- 使用
EXPLAIN分析 SQL
2. EXPLAIN 使用
EXPLAIN SELECT * FROM 表 WHERE ...;
看:type、key、rows、Extra
3. 常见 SQL 优化
- 避免
SELECT * - 避免在索引列上运算
- 小表驱动大表
- 合理使用索引
- 避免子查询嵌套太深
4. 读写分离
主库写,从库读
十四、权限管理(DCL)
1. 创建用户
CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';
2. 授权
GRANT ALL ON 库.* TO '用户'@'主机';
3. 撤销权限
REVOKE 权限 ON 库.* FROM 用户;
4. 删除用户
DROP USER 用户;
十五、备份与恢复
1. 备份(mysqldump)
mysqldump -u root -p 库名 > 备份文件.sql
2. 恢复
mysql -u root -p 库名 < 备份文件.sql
十六、MySQL 常用函数
1. 字符串函数
CONCAT() 拼接
LENGTH() 长度
UPPER() 大写
LOWER() 小写
SUBSTRING() 截取
TRIM() 去空格
2. 日期函数
NOW() 当前时间
CURDATE() 当前日期
YEAR() 年
MONTH() 月
DAY() 日
DATE_FORMAT() 格式化
3. 数学函数
ROUND() 四舍五入
CEIL() 向上取整
FLOOR() 向下取整
ABS() 绝对值
十七、MySQL 执行顺序(面试必背)
FROM → JOIN → ON → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT