数据库第 6 章 数据视图 课堂笔记
一、视图基础认知1. 视图定义视图是虚拟表本身不存储真实数据仅保存一条 SELECT 查询语句每次查询视图时数据库会实时执行 SQL从底层基表计算返回结果也被称作数据的 “观景窗”。2. 三大核心作用简化复杂查询把多表关联、聚合统计等冗长 SQL 封装成视图后续仅需简单 SELECT 调用视图不用重复写复杂连接语句降低代码冗余。保障数据安全可隐藏手机号、身份证、薪资等敏感字段仅开放用户需要的字段搭配权限管控限制用户只能访问视图无法直接操作原始数据表实现行 / 列级数据隔离。提升应用灵活性底层数据表结构修改时只需调整视图定义上层业务代码无需改动解耦程序与数据库底层存储。二、视图基础操作创建、查询1. 创建视图语法sqlCREATE [OR REPLACE] VIEW 视图名 [(列名列表)] AS SELECT 查询语句 [WITH [CASCADED|LOCAL] CHECK OPTION];注释OR REPLACE视图已存在时直接覆盖不用先删除再重建简化维护列名列表可自定义视图字段名省略则继承 SELECT 查询的字段WITH CHECK OPTION约束新增 / 修改数据必须匹配视图 WHERE 筛选条件防止数据脱离视图范围2. 三类创建案例单表筛选视-----筛选男生信息sqlCREATE VIEW v_male_students AS SELECT * FROM students WHERE Gender 男;多表关联视图-----关联学生、课程、成绩表展示 90 分以上成绩sqlCREATE VIEW v_high_score AS SELECT s.Name 姓名,c.Course_Name 课程名,sc.Score 分数 FROM students s JOIN scores sc ON s.ID sc.Student_ID JOIN courses c ON sc.Course_ID c.ID WHERE sc.Score 90;聚合统计视图-----统计各专业平均分sqlCREATE VIEW v_dept_avg_score AS SELECT s.Major major, AVG(sc.Score) avg_score FROM students s JOIN scores sc ON s.ID sc.Student_ID GROUP BY s.Major;3. 查询视图操作语法和普通数据表完全一致支持 WHERE、ORDER BY、多条件筛选sql-- 查询计算机专业男生 SELECT * FROM v_male_students WHERE Major 计算机科学;三、视图更新1. 可更新视图限制规则只有单表、无聚合、无分组、无 DISTINCT的视图才能更新出现以下结构则禁止更新包含SUM/AVG/COUNT等聚合函数使用GROUP BY分组、HAVING筛选多表 JOIN 关联、UNION 集合运算带子查询、DISTINCT 去重。简单区分单表筛选视图可更新多表、统计聚合视图不可更新。2. WITH CHECK OPTION 约束作用不加该约束修改数据后若不满足视图筛选条件数据会从视图消失造成数据混乱 添加约束执行 UPDATE/INSERT 时校验数据不满足 WHERE 条件直接报错Check option failed保证视图数据一致性。示例仅展示高数 80 分以上成绩禁止修改到 80 分以下sqlCREATE VIEW v_math_80 AS SELECT s.ID,s.Name,c.Course_Name,sc.Score FROM students s JOIN scores sc ON s.ID sc.Student_ID JOIN courses c ON sc.Course_ID c.ID WHERE c.Course_Name 高等数学 AND sc.Score 80 WITH CHECK OPTION;3. 更新实操规则UPDATE 修改仅单表视图支持修改会同步映射底层基表多表视图执行更新会直接报错DELETE 删除只能删除单表视图数据多表视图不支持INSERT 插入单表视图可插入必须满足视图筛选条件且基表所有非空字段必须提供值多表视图禁止插入。四、视图管理修改、删除1. 修改视图语法sqlALTER VIEW 视图名 [(列名)] AS SELECT 查询语句 [WITH CHECK OPTION];替代方案CREATE OR REPLACE VIEW使用更广泛无需手动删除旧视图。示例给专业平均分视图新增学生人数字段sqlALTER VIEW v_dept_avg_score AS SELECT s.Major major, AVG(sc.Score) avg_score, COUNT(DISTINCT s.ID) student_count FROM students s LEFT JOIN scores sc ON s.ID sc.Student_ID GROUP BY s.Major;2. 删除视图基础删除视图不存在会报错sqlDROP VIEW v_high_score;安全删除推荐不存在也不会抛异常sqlDROP VIEW IF EXISTS v_temp_view;批量删除多个视图sqlDROP VIEW IF EXISTS v_a, v_b;五、本章核心总结视图是虚拟查询表不存储物理数据仅存储查询逻辑。三大价值简化查询、数据权限隔离、业务逻辑解耦。创建视图核心CREATE VIEWWITH CHECK OPTION用于数据修改约束。更新视图核心仅单表无聚合视图可读写多表 / 统计视图禁止更新。维护视图ALTER VIEW改定义DROP VIEW IF EXISTS安全删除。实操开发场景频繁复用的复杂查询、敏感数据权限管控、业务分层解耦。