📚 一、MySQL 基础与 SQL 语言分类
MySQL 是最流行的关系型数据库管理系统(RDBMS)之一,采用 C/S(客户端/服务器)架构,默认端口为 3306。核心操作概括为 CRUD:增(Create)、查(Read)、改(Update)、删(Delete)。
SQL 语言主要分为四大类:
- DDL (数据定义语言) :用于定义数据库对象(库、表、索引等)。常用指令:
CREATE、ALTER、DROP。 - DML (数据操作语言) :用于对表中的数据进行增删改。常用指令:
INSERT、UPDATE、DELETE。 - DQL (数据查询语言) :用于查询数据。常用指令:
SELECT。 - DCL (数据控制语言) :用于定义访问权限和安全级别。常用指令:
GRANT、REVOKE。
🛠️ 二、数据库与表的基本操作 (DDL)
1. 数据库操作
- 创建数据库:
CREATE DATABASE IF NOT EXISTS 库名 CHARSET utf8mb4; - 删除数据库:
DROP DATABASE IF EXISTS 库名; - 切换/使用数据库:
USE 库名;
2. 数据表操作与约束 创建表时需指定列名、数据类型及约束。常用的核心约束包括:
| 约束关键字 | 含义 |
|---|---|
| PRIMARY KEY | 主键:唯一、非空,一张表只能有一个 |
| FOREIGN KEY | 外键:关联另一张表的主键,维护引用完整性 |
| UNIQUE | 唯一约束:字段值不能重复(允许为NULL) |
| NOT NULL | 非空约束:字段不能为空 |
| AUTO_INCREMENT | 自增:通常用于主键,数字自动递增 |
| DEFAULT | 默认值:插入数据不填该字段时,使用默认值 |
📝 三、数据增删改查 (DML & DQL)
1. 基础增删改
- 插入 :
INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2); - 更新 :
UPDATE 表名 SET 字段1=值1 WHERE 条件;(注意一定要带WHERE条件,否则会更新全表) - 删除 :
DELETE FROM 表名 WHERE 条件;
2. 单表查询 (DQL)
- 条件查询 :使用
WHERE配合比较运算符(=,>,<)、逻辑运算符(AND,OR)、范围(BETWEEN...AND)、模糊查询(LIKE '%关键字%')以及IS NULL判断。 - 排序与分页 :
ORDER BY 字段 [ASC|DESC]进行排序;LIMIT 起始索引, 查询条数进行分页。 - 聚合与分组 :常用聚合函数有
COUNT(),SUM(),AVG(),MAX(),MIN()。配合GROUP BY进行分组,分组后的条件过滤需使用HAVING。
3. 多表查询
- 连接查询 (JOIN) :
INNER JOIN:内连接,返回两表匹配的行。LEFT JOIN:左外连接,返回左表所有行及右表匹配的行。RIGHT JOIN:右外连接,返回右表所有行及左表匹配的行。
- 子查询 :在
WHERE或FROM子句中嵌套SELECT语句。
⚙️ 四、MySQL 进阶核心原理
1. 存储引擎 MySQL 支持多种存储引擎,最主流的两种对比:
- InnoDB:支持事务、行级锁、外键,崩溃恢复能力强,适合高并发读写(默认引擎)。
- MyISAM:不支持事务和外键,只支持表级锁,读取速度较快,适合以查询为主的场景。
2. 索引 (Index) 索引是提升查询性能的关键,底层多采用 B+树 结构。
- 分类:主键索引(聚簇索引)、普通索引、唯一索引、联合索引。
- 最左前缀原则:在联合索引中,查询条件必须从索引的最左列开始匹配,否则索引会失效。
- 索引失效场景 :对索引列进行运算或使用函数、
LIKE '%abc'前导模糊查询、隐式类型转换、使用OR且条件中有一列未加索引等。
3. 事务 (Transaction) 事务是一组不可分割的 SQL 操作,具有 ACID 四大特性:
- 原子性 (Atomicity):要么全部成功,要么全部失败回滚(依赖 Undo Log)。
- 一致性 (Consistency):事务前后数据总量和状态保持一致。
- 隔离性 (Isolation):多用户并发访问时互不干扰。
- 持久性 (Durability):事务提交后,数据永久保存(依赖 Redo Log)。
4. 事务隔离级别 MySQL 默认隔离级别为 可重复读 (REPEATABLE READ)。不同级别解决的问题如下:
- 读未提交 (READ UNCOMMITTED)
- 读已提交 (READ COMMITTED):解决脏读。
- 可重复读 (REPEATABLE READ):解决脏读、不可重复读(通过 MVCC 和间隙锁解决幻读)。
- 串行化 (SERIALIZABLE):解决所有并发问题,但性能最低。
5. 性能分析与优化
- 执行计划 :使用
EXPLAIN关键字分析 SQL 语句,查看是否使用了索引(key字段)、扫描行数(rows字段)以及连接类型(type字段,全表扫描ALL性能最差)。 - 慢查询日志 :开启慢查询日志,定位执行时间超过阈值(如
long_query_time)的 SQL 语句进行针对性优化。
这份笔记涵盖了 MySQL 从入门到进阶的主干知识,建议结合实际的 SQL 练习来加深理解。如果需要针对某个具体知识点(比如 B+树原理或具体的 SQL 调优案例)进行详细展开,随时可以告诉我!