一、主键(Primary Key)
核心特性
- 唯一性:作为记录的唯一标识,数据表内无重复值;
- 单表唯一:一张数据表仅能设置一个主键;
- 组合支持:可由单个字段或多个字段组合构成;
- 非空约束:主键字段自带非空属性,无需额外定义。
核心作用
- 唯一标识数据:精准区分表内每一条记录,是数据查找的核心依据;
- 保证数据完整:通过非空和唯一约束,避免重复、无效数据录入或修改;
- 提升查询效率:主键会自动生成索引,大幅加快基于主键的查找速度;
- 建立表间关联:作为外键的关联对象,实现多张数据表的关联。
核心操作
mysql
-- 建表时创建主键
CREATE TABLE users (
id INT AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
);
-- 修改主键(先删除后创建)
ALTER TABLE users DROP PRIMARY KEY;
ALTER TABLE users ADD PRIMARY KEY (id);
-- 删除主键
ALTER TABLE users DROP PRIMARY KEY;
二、外键(Foreign Key)
核心特性
- 参照完整性:子表的外键取值,必须与父表的主键值一致;
- 级联操作:支持关联数据同步更新、同步删除;
- 来源固定:外键必须关联另一张表的主键或唯一键。
核心作用
- 保持数据一致:避免产生无关联的孤立数据,主表数据变更时自动维护关联数据;
- 实现多表关联:支持一对一、一对多等表间关系,支撑多表联合查询;
- 规范数据结构:明确表与表之间的关系,减少数据冗余,方便后期维护。
核心操作
mysql

三、索引(Index)
核心特性
- 优化查询性能:通过专用索引结构快速定位数据,缩短查询耗时;
- 类型区分:分为唯一索引(不允许重复值)和普通索引(允许重复值)。
常见分类
表格
| 分类维度 | 类型 | 核心特点 |
|---|---|---|
| 数据结构 | B+tree 索引 | MySQL 默认索引,支持范围、排序、精确查询 |
| Hash 索引 | 等值查询速度快,不支持范围和排序,仅部分引擎支持 | |
| Fulltext 索引 | 用于文本关键词检索,适配模糊查询 | |
| 物理存储 | 聚簇索引 | 数据与索引存储在一起,单表仅有一个(默认为主键) |
| 二级索引 | 存储聚簇索引值,查询时需二次获取实际数据 | |
| 字段特性 | 主键索引 | 自带非空、唯一约束,自动生成 |
| 普通索引 | 基础索引,无额外约束,允许重复值 | |
| 前缀索引 | 仅索引字符串前几位字符,节省存储空间 | |
| 字段个数 | 单列索引 | 基于单个字段创建,适配单条件查询 |
| 联合索引 | 多个字段组合创建,遵循最左匹配规则 |
核心操作
mysql

索引分析(EXPLAIN)
搭配查询语句使用,分析索引使用情况,重点关注字段:
type:数据访问方式,性能从高到低排序,ALL 代表全表扫描,性能最差;key:实际使用的索引,为 NULL 表示未使用索引;rows:预估扫描的数据行数,数值越小性能越好;Extra:额外执行信息,出现 Using filesort、Using temporary 需要优化。
四、Check 约束(Check Constraint)
核心特性
- 自定义数据校验:强制字段内容符合设定的规则条件;
- 版本要求:MySQL 8.0.16 及以上版本可正常生效。
核心作用
- 保证数据有效:在数据库层面拦截不符合业务规则的数据;
- 简化程序逻辑:将数据校验统一交由数据库处理,减少程序重复代码;
- 完善数据完整性:与主键、外键搭配,构建完整的数据约束体系。
核心操作
mysql

注意事项
- 性能影响:过多、复杂的 Check 约束会降低数据插入、更新的速度;
- 兼容性:不同数据库对 Check 约束的支持不同,使用时需适配;
- 复杂校验:多字段关联校验可通过触发器实现。
五、存储过程(Stored Procedure)
核心特性
- 代码封装:将一组 SQL 语句预编译存储,可重复调用;
- 支持业务逻辑:可包含变量定义、条件判断、循环等操作;
- 预编译执行:创建时完成编译,调用时直接运行,执行效率更高。
核心优势
- 提升性能:减少重复解析 SQL 的开销,复杂逻辑执行更高效;
- 增强安全性:可授权用户仅调用存储过程,禁止直接操作数据表;
- 简化操作:封装复杂 SQL 和业务逻辑,降低程序开发复杂度;
- 减少网络传输:仅传输调用指令和参数,无需传输完整 SQL 语句。
核心操作
mysql

六、触发器(Trigger)
核心特性
- 自动执行:在数据插入、更新、删除操作的前后自动触发运行;
- 绑定数据表:与指定表关联,仅响应对应表的操作;
- 行级触发:每一行数据发生变更时都会执行。
核心分类
表格
| 触发时机 | 触发事件 | 适用场景 |
|---|---|---|
| BEFORE | INSERT | 数据插入前校验、设置默认值 |
| BEFORE | UPDATE | 数据更新前校验、修正内容 |
| BEFORE | DELETE | 数据删除前校验、前置检查 |
| AFTER | INSERT | 数据插入后记录日志、同步关联数据 |
| AFTER | UPDATE | 数据更新后更新统计数据、刷新缓存 |
| AFTER | DELETE | 数据删除后清理关联数据、记录操作日志 |
核心操作
mysql
