MySQL数据库高级特性

一、核心约束(记住区别)

约束类型 作用 特点
主键(PRIMARY KEY) 唯一标识一行 唯一、非空、一个表只能有一个
外键(FOREIGN KEY) 表间关联 引用另一表的主键,保证一致性
索引(INDEX) 加速查询 可重复、可多列、可唯一
CHECK 约束 列值条件校验 MySQL 8.0.16+ 支持

✅ 口诀:主键唯一非空,外键引用主键,索引加速查询,Check 把关数据


二、索引(重点中的重点)

1. 按数据结构分

类型 特点 场景
B+Tree 范围查询快 大多数查询
Hash 等值查询极快 精确匹配
Fulltext 全文检索 文章、搜索

2. 按物理存储分

  • 聚簇索引:数据按主键排序存储,一个表一个

  • 二级索引:存储主键值,需回表

3. 按字段个数分

  • 单列索引

  • 联合索引:最左前缀原则(必须从左到右使用)

✅ 口诀:B+树最常见,Hash精确快,全文搜文本,聚簇主键排


三、事务(ACID 必背)

特性 含义
原子性 要么全成功,要么全失败
一致性 事务前后数据完整
隔离性 事务间互不干扰
持久性 提交后永久保存

隔离级别(从低到高)

级别 脏读 不可重复读 幻读
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ(默认)
SERIALIZABLE

✅ 口诀:读未提交全乱,读已提交防脏,可重复读防两次,串行化最安全


四、存储过程 vs 触发器

对比项 存储过程 触发器
调用方式 手动 CALL 自动触发
触发事件 INSERT / UPDATE / DELETE
使用场景 复杂逻辑封装 自动化维护、日志、校验

✅ 口诀:过程手动调,触发器自动跑


五、锁(理解即可)

分类 类型 特点
粒度 表锁 锁整个表,并发差
粒度 行锁 锁一行,并发好(InnoDB)
粒度 间隙锁 防幻读
性质 共享锁(读锁) 可并发读
性质 排它锁(写锁) 独占写

✅ 口诀:表锁慢,行锁快,间隙锁防幻读,共享读,排它写


六、存储引擎(重点对比)

引擎 事务 锁粒度 适用场景
InnoDB(默认) 行锁 高并发、写多
MyISAM 表锁 读多写少
Memory 表锁 临时数据、缓存

✅ 口诀:InnoDB 全都要,MyISAM 只读快,Memory 重启丢


七、日志(了解即可)

日志类型 作用
慢日志 记录慢 SQL,用于优化
重做日志(Redo Log) 保证事务持久性,崩溃恢复

✅ 口诀:慢日志抓慢 SQL,重做日志保数据


八、并发问题(高频面试)

问题 描述
更新丢失 后提交覆盖前提交
脏读 读到未提交的数据
不可重复读 同一事务两次读结果不同
幻读 新增/删除导致行数变化

✅ 口诀:丢覆脏未提,两次读不一,幻读行数变


九、常用命令速查

sql

复制代码
-- 索引
CREATE INDEX idx_name ON table(col);
DROP INDEX idx_name ON table;

-- 事务
START TRANSACTION;
COMMIT;
ROLLBACK;

-- 存储过程
CALL proc_name();

-- 触发器(自动执行)
CREATE TRIGGER trigger_name BEFORE INSERT ON table ...

-- 查看索引
SHOW INDEX FROM table;

-- 查看引擎
SHOW ENGINES;
相关推荐
风哥2号4 小时前
数据库教程FGMT27‑MySQL数据库基础知识与体系架构
数据库·mysql
风哥2号7 小时前
数据库教程FGMT43‑MySQL性能分析与优化调整
数据库·mysql
默 语10 小时前
Java新手入门:从零开始安装JDK并配置环境变量
java·开发语言·python·mysql·group by·1024程序员节·数据去重
用户30745969820711 小时前
MySQL EXPLAIN 零基础完全精通指南:从"看不懂"到"会优化"
mysql
这个DBA有点耶11 小时前
自增主键用尽了怎么办?INT溢出、在线迁移与预防策略全解析
数据库·mysql·代码规范
迷茫的大专生11 小时前
高可用总结
redis·mysql·nginx·高可用
迷茫的大专生13 小时前
服务器部署与 MySQL 运维学习笔记:从 Ansible 到高可用与性能优化
mysql·nginx·ansible·mysql优化·keepalive
Lyra_Infra14 小时前
从 MySQL 到达梦:一次信创隔离环境里的数据库迁移踩坑实录
数据库·后端·mysql
泡茶喝茶写代码14 小时前
量化数据开发实战系列(第 25 篇):基金基础接口实战:基金列表、ETF-LOF 分类、基金概况、净值数据
java·数据库·人工智能·python·mysql
worilb16 小时前
Win下使用同一套MySQL创建第二个独立实例
mysql