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;
相关推荐
Trouvaille ~2 小时前
【MySQL篇】从零开始:安装与基础概念
linux·数据库·mysql·ubuntu·c·教程·基础入门
Yana.nice3 小时前
MySQL 事务的四大特性(ACID)
数据库·mysql·oracle
Yana.nice3 小时前
MySQL 三大日志(redo log、undo log、binlog)的区别和作用
数据库·mysql
XDHCOM4 小时前
MySQL CASE WHEN语句应用实例:如何实现条件查询与数据转换?
数据库·mysql
木下~learning4 小时前
MySQL 从入门到精通:安装、终端操作、远程连接与 C 语言 API 全教程
c语言·数据库·mysql
阿维的博客日记4 小时前
MySQL中type字段解析
数据库·mysql
Trouvaille ~4 小时前
【MySQL篇】表的操作:数据的容器
linux·数据库·mysql·oracle·xshell·ddl·表的操作
黑牛儿4 小时前
从0开始实现Mysql主从配置实战
服务器·数据库·后端·mysql
麦聪聊数据4 小时前
数据库安全与运维管控(一):MySQL、PG与Oracle原生审计机制对比
运维·数据库·mysql·oracle