计算机应用

导航

第16周 视图设计与事务管理

第16周 · 视图设计与事务管理

这周两个重要概念:视图让你把常用查询"存成快捷方式"反复用;事务保证一组操作要么全成、要么全败(典型如银行转账)。一个是"查询封装",一个是"操作安全带"。


一、知识点:视图是什么

视图(View)是一张虚拟表:它不存真实数据,只是一个保存起来的 SELECT 查询。每次查视图,MySQL 都现场跑背后的 SELECT。

类比:视图像桌面的快捷方式,真实文件(基表)在别处;双击快捷方式看到的还是原文件内容。


二、操作教程:创建视图 CREATE VIEW

-- 把"学生姓名+成绩"的联查存成视图
CREATE VIEW v_stu_grade AS
  SELECT s.sname, sc.grade
  FROM student s JOIN sc ON s.sid = sc.sid;

-- 之后像查表一样查视图
SELECT * FROM v_stu_grade;

视图名一般以 v_ 开头,方便识别。


三、知识点:视图的作用

  1. 简化复杂查询:常用多表联查封装一次,以后直接 SELECT * FROM 视图
  2. 安全性/权限控制:只把视图授权给用户,隐藏基表的敏感列(如工资、密码列)。
  3. 逻辑独立性:基表结构变了,改视图定义即可,应用层不用改。

四、知识点:可更新视图的限制

不是所有视图都能用来 INSERT/UPDATE/DELETE可更新视图通常要求: - 基于单张基表; - 不含 聚合函数GROUP BYDISTINCTJOIN、子查询等。

上面 v_stu_grade 是两张表 JOIN 的,属于不可更新视图,只能查不能改。考试一般不深考更新,记住"多表/聚合视图通常只读"即可。

删除视图:

DROP VIEW v_stu_grade;

五、知识点:事务与 ACID

事务(Transaction) 是一组 SQL 操作,要么全部成功提交,要么全部失败回滚,保证数据一致。

四大特性 ACID: | 特性 | 含义 | | --- | --- | | A 原子性 | 事务内操作不可分割,全成或全败 | | C 一致性 | 数据从一个一致状态到另一个一致状态 | | I 隔离性 | 并发事务互不干扰 | | D 持久性 | 提交后修改永久保存 |


六、操作教程:事务控制 BEGIN / COMMIT / ROLLBACK

-- 开启事务
START TRANSACTION;

-- 一组操作(如给 2024001 成绩 +5)
UPDATE sc SET grade = grade + 5 WHERE sid = 2024001;

-- 检查无误,提交(修改永久生效)
COMMIT;

-- 如果中途发现错了,撤销整个事务(回到开启前)
-- ROLLBACK;

关键点:COMMIT 之前,改动都"悬着";一旦 ROLLBACK,所有未提交修改全部撤销。COMMIT 之后就不能再回滚了。

转账案例(A 减钱、B 加钱必须同时成功):

START TRANSACTION;
UPDATE account SET money = money - 100 WHERE name = 'A';
UPDATE account SET money = money + 100 WHERE name = 'B';
COMMIT;   -- 两句都成功才提交;任一句出错就 ROLLBACK

七、综合实操:作业三题

-- 题1:建视图并查询
CREATE VIEW v_stu_grade AS
  SELECT s.sname, sc.grade
  FROM student s JOIN sc ON s.sid = sc.sid;
SELECT * FROM v_stu_grade;

-- 题2:用事务保证加分原子性
START TRANSACTION;
UPDATE sc SET grade = grade + 5 WHERE sid = 2024001;
COMMIT;
-- 出错时执行 ROLLBACK; 撤销

-- 题3:要点(见上文视图作用、可更新限制、COMMIT/ROLLBACK 作用)

八、易混点排查表

现象 解决方法
以为视图存了数据 视图是虚拟表,只存查询定义,不存数据
改视图报不可更新 多表/聚合视图只读;需改数据直接改基表
改完数据"不见了" 可能在一个未 COMMIT 的事务里,提交后才生效
ROLLBACK 无效 已 COMMIT 的事务不能回滚;错在提交前才撤
视图和表分不清 视图名加 v_ 前缀;SHOW TABLES 会列视图但本质是虚拟
并发改同一行乱了 理解隔离性;必要时用事务+锁

九、小测验(自测)

  1. 视图是真实存数据的表吗?创建视图的基本语法是什么?
  2. 视图的三个主要作用?什么情况下视图"不可更新"?
  3. 事务中 COMMITROLLBACK 分别干什么?为什么转账要用事务?
  4. 简述 ACID 四个特性中"原子性"和"持久性"的含义。

【声明】本文由 AI 辅助生成,仅供 MySQL 数据库教学参考,如有疑误以教材为准。

posted on 2026-08-29 10:26  eagle福  阅读(11)  评论(0)    收藏  举报