学习哲学:以"数据存储 → 数据操作 → 数据优化 → 数据应用"为骨架,以官方文档为锚点,以实际场景为验收标准。
| 术语 | 英文 | 通俗解释 |
|---|
| 数据库(Database) | Database | 有组织的数据集合,像一个大仓库,里面分了很多货架(表) |
| 数据库管理系统(DBMS) | Database Management System | 管理数据库的软件,MySQL 就是一种 DBMS |
| 关系型数据库(RDBMS) | Relational DBMS | 用"表"来组织数据,表与表之间可以建立关系,像 Excel 的多张工作表 |
| 表(Table) | Table | 数据的结构化容器,由行和列组成,类似 Excel 表格 |
| 行(Row) | Row / Record | 表中的一条数据,描述一个完整实体,如"一只宠物的全部信息" |
| 列(Column) | Column / Field | 表中的一个属性,如"名字""出生日期",所有行都有相同的列 |
| 字段(Field) | Field | 同"列",强调单个数据项 |
| 记录(Record) | Record | 同"行",强调一条完整的数据 |
| 元组(Tuple) | Tuple | 关系代数中的术语,等同于"行" |
| 关系(Relation) | Relation | 关系代数中的术语,等同于"表" |
| 术语 | 英文 | 通俗解释 |
|---|
| 主键(Primary Key) | Primary Key (PK) | 表中唯一标识每一行的"身份证号",不允许重复,不能为 NULL |
| 外键(Foreign Key) | Foreign Key (FK) | 建立表与表之间关系的桥梁,指向另一张表的主键 |
| 候选键(Candidate Key) | Candidate Key | 可以当主键的列(或列组合),满足唯一性和非空性 |
| 超键(Super Key) | Super Key | 能唯一标识一行的列集合(可能包含多余列) |
| 复合键(Composite Key) | Composite Key | 由多个列组合而成的主键 |
| 代理键(Surrogate Key) | Surrogate Key | 人为生成的唯一标识,如自增 ID,与业务无关 |
| 自然键(Natural Key) | Natural Key | 业务本身具有唯一性的属性,如身份证号 |
| 唯一约束(Unique) | Unique Constraint | 保证列值不重复,但允许 NULL |
| 非空约束(NOT NULL) | NOT NULL Constraint | 该列必须有值,不能为空 |
| 默认值(Default) | Default Value | 未指定值时自动填充的值 |
| 检查约束(CHECK) | CHECK Constraint | 限制列值必须满足的条件(MySQL 5.7 支持语法但实际不生效) |
| 参照完整性(Referential Integrity) | Referential Integrity | 外键指向的数据必须真实存在,防止" dangling pointer " |
| 术语 | 说明 |
|---|
| TINYINT | 1 字节整数,范围 -128~127(有符号)或 0~255(无符号) |
| SMALLINT | 2 字节整数 |
| INT / INTEGER | 4 字节整数,最常用,范围约 ±21 亿 |
| BIGINT | 8 字节整数,用于大数据量 ID |
| FLOAT | 单精度浮点数,4 字节,近似存储 |
| DOUBLE | 双精度浮点数,8 字节,近似存储 |
| DECIMAL(M,D) | 精确小数,M 总位数,D 小数位,金额计算必须用此类型 |
| UNSIGNED | 无符号修饰符,只存正数,扩大正数范围 |
| AUTO_INCREMENT | 自增属性,插入时自动 +1,通常用于主键 |
| ZEROFILL | 零填充,如 INT(5) ZEROFILL 显示 00123 |
| 术语 | 说明 |
|---|
| CHAR(M) | 定长字符串,M 字符,不足补空格,读取快 |
| VARCHAR(M) | 变长字符串,M 字符,节省空间,最常用 |
| TEXT | 长文本,最大 65535 字节 |
| BLOB | 二进制大对象,存储图片/文件等二进制数据 |
| ENUM | 枚举,只能从预定义列表中选一个值 |
| SET | 集合,可从预定义列表中选多个值(位图存储) |
| 术语 | 说明 |
|---|
| DATE | 日期,格式 YYYY-MM-DD |
| TIME | 时间,格式 HH:MM:SS |
| DATETIME | 日期+时间,格式 YYYY-MM-DD HH:MM:SS,范围大 |
| TIMESTAMP | 时间戳,范围 1970-2038,自动时区转换,支持自动更新 |
| YEAR | 年份,格式 YYYY |
DATETIME vs TIMESTAMP:DATETIME 存你输入什么就是什么,与时区无关;TIMESTAMP 存 UTC 时间,读取时按当前时区转换。
| 术语 | 英文 | 说明 |
|---|
| CREATE | Create | 创建数据库对象(数据库、表、索引等) |
| ALTER | Alter | 修改已有数据库对象的结构 |
| DROP | Drop | 删除数据库对象(⚠️ 危险操作,不可恢复) |
| TRUNCATE | Truncate | 清空表数据,比 DELETE 快,但不记录单行删除日志 |
| RENAME | Rename | 重命名表 |
| 术语 | 英文 | 说明 |
|---|
| SELECT | Select | 查询数据,最常用的 SQL 语句 |
| INSERT | Insert | 向表中插入新数据 |
| UPDATE | Update | 修改已有数据 |
| DELETE | Delete | 删除数据(可条件删除) |
| MERGE / REPLACE | Merge / Replace | 插入或替换(MySQL 中 REPLACE = DELETE + INSERT) |
| CRUD | Create, Read, Update, Delete | 增删改查的统称,数据库四大基本操作 |
| 术语 | 英文 | 说明 |
|---|
| GRANT | Grant | 授予用户权限 |
| REVOKE | Revoke | 收回用户权限 |
| 权限(Privilege) | Privilege | 用户能执行的操作,如 SELECT、INSERT、ALL PRIVILEGES |
| 术语 | 英文 | 说明 |
|---|
| 事务(Transaction) | Transaction | 一组原子性的 SQL 操作,要么全成功,要么全失败 |
| COMMIT | Commit | 提交事务,永久保存更改 |
| ROLLBACK | Rollback | 回滚事务,撤销未提交的更改 |
| SAVEPOINT | Savepoint | 事务中的保存点,可回滚到指定点 |
| ACID | Atomicity, Consistency, Isolation, Durability | 事务的四大特性:原子性、一致性、隔离性、持久性 |
| 术语 | 英文 | 说明 |
|---|
| JOIN | Join | 连接多张表进行查询 |
| INNER JOIN | Inner Join | 内连接,只返回匹配条件的行(交集) |
| LEFT JOIN | Left Outer Join | 左外连接,返回左表所有行,右表不匹配填 NULL |
| RIGHT JOIN | Right Outer Join | 右外连接,返回右表所有行,左表不匹配填 NULL |
| FULL JOIN | Full Outer Join | 全外连接,返回两边所有行(MySQL 不支持,需用 UNION 模拟) |
| CROSS JOIN | Cross Join | 交叉连接,笛卡尔积,所有行互相组合 |
| SELF JOIN | Self Join | 自连接,同一张表与自己连接 |
| ON 子句 | ON Clause | 指定连接条件 |
| USING 子句 | USING Clause | 当两表同名列作为连接条件时的简写 |
| 笛卡尔积(Cartesian Product) | Cartesian Product | 无连接条件时,两表行数相乘的结果 |
| 术语 | 英文 | 说明 |
|---|
| 子查询(Subquery) | Subquery | 嵌套在另一条 SQL 中的查询 |
| 派生表(Derived Table) | Derived Table | 子查询出现在 FROM 子句中,充当临时表 |
| 相关子查询(Correlated Subquery) | Correlated Subquery | 子查询依赖外层查询的值 |
| 标量子查询(Scalar Subquery) | Scalar Subquery | 返回单个值的子查询 |
| EXISTS | Exists | 判断子查询是否有返回行 |
| IN | In | 判断值是否在子查询结果集中 |
| ALL / ANY / SOME | All / Any / Some | 与子查询结果集做全部/任意比较 |
| 术语 | 英文 | 说明 |
|---|
| 聚合函数(Aggregate Function) | Aggregate Function | 对多行数据进行汇总计算 |
| COUNT() | Count | 计数 |
| SUM() | Sum | 求和 |
| AVG() | Average | 平均值 |
| MAX() | Maximum | 最大值 |
| MIN() | Minimum | 最小值 |
| GROUP BY | Group By | 按指定列分组,聚合函数对每组分别计算 |
| HAVING | Having | 对分组后的结果进行过滤(类似 WHERE,但用于聚合结果) |
| DISTINCT | Distinct | 去重,只返回唯一值 |
| 窗口函数(Window Function) | Window Function | MySQL 8.0 引入,5.7 不支持,了解即可 |
| 术语 | 英文 | 说明 |
|---|
| 索引(Index) | Index | 加速数据查询的数据结构,类似书的目录 |
| 主键索引(Primary Index) | Primary Index | 主键自动创建的索引 |
| 唯一索引(Unique Index) | Unique Index | 保证列值唯一的索引 |
| 普通索引(Normal Index) | Normal Index | 最基本的索引,仅加速查询 |
| 全文索引(Fulltext Index) | Fulltext Index | 用于文本搜索的专用索引 |
| B-Tree 索引 | B-Tree Index | MySQL 默认索引类型,平衡多路查找树 |
| 哈希索引(Hash Index) | Hash Index | 基于哈希表的索引,精确匹配快,不支持范围查询 |
| 覆盖索引(Covering Index) | Covering Index | 查询所需列全在索引中,无需回表查数据 |
| 最左前缀原则 | Leftmost Prefix Rule | 复合索引必须从最左列开始用才能生效 |
| EXPLAIN | Explain | 分析 SQL 执行计划的命令,优化必备 |
| 执行计划(Execution Plan) | Execution Plan | 数据库执行 SQL 的具体步骤和策略 |
| 查询优化器(Query Optimizer) | Query Optimizer | 自动选择最优执行计划的组件 |
| 回表(Lookup) | Lookup / Bookmark Lookup | 通过索引找到主键,再查主键索引获取完整数据 |
| 术语 | 英文 | 说明 |
|---|
| 存储引擎(Storage Engine) | Storage Engine | 负责数据存储和读取的底层模块,可插拔架构 |
| InnoDB | InnoDB | MySQL 5.5+ 默认引擎,支持事务、行级锁、外键 |
| MyISAM | MyISAM | 旧版默认引擎,表级锁,不支持事务,已逐渐淘汰 |
| MEMORY | Memory | 数据存内存,速度快但重启丢失 |
| 事务(Transaction) | Transaction | 一组原子操作,ACID 特性 |
| 行级锁(Row-Level Locking) | Row-Level Lock | 只锁定被操作的行,并发性能好 |
| 表级锁(Table-Level Locking) | Table-Level Lock | 锁定整张表,并发性能差 |
| MVCC | Multi-Version Concurrency Control | 多版本并发控制,实现非阻塞读 |
| Redo Log | Redo Log | 重做日志,崩溃恢复用,保证持久性 |
| Undo Log | Undo Log | 回滚日志,用于事务回滚和 MVCC |
| Binlog | Binary Log | 二进制日志,记录所有数据变更,用于复制和恢复 |
| Slow Query Log | Slow Query Log | 慢查询日志,记录执行时间超过阈值的 SQL |
| Doublewrite Buffer | Doublewrite Buffer | 双写缓冲区,防止页写损坏 |
| Buffer Pool | Buffer Pool | InnoDB 缓存池,缓存数据和索引页 |
| 术语 | 英文 | 说明 |
|---|
| 主从复制(Replication) | Replication | 主库数据自动同步到从库 |
| 主库(Master) | Master | 写操作的主服务器 |
| 从库(Slave) | Slave | 接收主库同步数据的只读服务器 |
| 二进制日志(Binlog) | Binary Log | 记录数据变更,复制的基础 |
| GTID | Global Transaction Identifier | 全局事务标识,简化复制管理 |
| 读写分离 | Read/Write Splitting | 写走主库,读走从库,分摊压力 |
| 分库分表 | Sharding | 数据水平拆分,分散到多个库/表 |
| 垂直拆分 | Vertical Partitioning | 按列拆分,不同表存不同字段 |
| 水平拆分 | Horizontal Partitioning | 按行拆分,不同表存不同范围的数据 |
| 连接池(Connection Pool) | Connection Pool | 预先创建连接并复用,提升并发性能 |
| ORM | Object-Relational Mapping | 对象关系映射,将表映射为编程语言对象 |
| SQL 注入(SQL Injection) | SQL Injection | 通过恶意输入篡改 SQL 的安全漏洞 |
| 参数化查询 | Parameterized Query | 使用占位符传递参数,防止 SQL 注入 |
| A-E | F-J | K-O | P-T | U-Z |
|---|
| ACID | Field | Key | Primary Key | Unique |
| ALTER | Foreign Key | Left Join | Query | Update |
| Auto Increment | Full Join | Lock | Record | VARCHAR |
| B-Tree | GROUP BY | Master | Replication | WHERE |
| Buffer Pool | HAVING | MVCC | Right Join | Window Function |
| CHAR | Index | Normal Index | Row | ZeroFill |
| Column | Inner Join | NOT NULL | SELECT | |
| Commit | INSERT | ON | Self Join | |
| COUNT | InnoDB | ORM | SET | |
| Cross Join | JOIN | Partition | Sharding | |
| Database | Left Join | Primary Key | Subquery | |
| DECIMAL | Like | Privilege | Table | |
| DELETE | Limit | Query Optimizer | TIMESTAMP | |
| DISTINCT | Lookup | Redo Log | Transaction | |
| DROP | | Rollback | Trigger | |
| ENUM | | Row | Truncate | |
| EXPLAIN | | Schema | UNION | |
| | SELECT | Undo Log | |
- 主键和唯一索引的区别是什么?一个表可以有几个主键?几个唯一索引?
- CHAR 和 VARCHAR 的区别?什么场景用 CHAR 更好?
- 事务的 ACID 分别代表什么?MySQL 哪个存储引擎支持事务?
- INNER JOIN 和 LEFT JOIN 的结果集有什么区别?
- 什么是笛卡尔积?如何避免产生笛卡尔积?
- 索引是什么?为什么加了索引查询会变快?
- 什么是 SQL 注入?如何防范?
- 主从复制的作用是什么?读写分离解决了什么问题?