学习笔记
MySQL 进阶:视图、索引与事务
2026-08-18 09:00
MySQL事务索引视图
梳理视图封装查询、索引优化访问路径与事务保证一致性的 MySQL 进阶知识点。
MySQL 进阶:视图、索引与事务
来源:数据库技术与应用 第三次实验 · 整理:婉萤
视图:包装好的查询
视图是存储在数据库里的命名查询,本质是一层「虚拟表」:
CREATE VIEW v_emp_dept AS
SELECT e.ename, d.dname FROM emp e JOIN dept d ON e.deptno = d.deptno;
- 作用:简化复杂查询、隔离敏感列(只暴露需要的字段)、逻辑层不变(底层表结构改了,改视图即可)
- 注意:视图不存数据,查询视图 = 实时执行底层 SQL
索引:查询加速器
在 ename 上建索引前后,WHERE ename = '...' 的执行计划从 type=ALL(全表扫描)变成 type=ref(索引查找):
ALTER TABLE emp ADD INDEX idx_ename (ename);
EXPLAIN SELECT * FROM emp WHERE ename = 'SCOTT';
- 索引适合高频查询、低修改的列
- 不是越多越好:每次写入都要维护索引
- 复合索引注意最左前缀原则
事务:要么全做,要么不做
转账场景:A 扣钱、B 加钱,两步必须同生共死。
START TRANSACTION;
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
COMMIT; -- 或 ROLLBACK
ACID 四特性里,实务中最常打交道的是 A(原子性)和 I(隔离性)。
存储引擎
- InnoDB:支持事务、行级锁、外键——现代默认选择
- MyISAM:不支持事务,表级锁,读多写少的旧场景
配套实践:JDBC 里用 conn.setAutoCommit(false) + commit()/rollback() 手动控制事务——银行账户系统的转账原子性就是这么做的。