一、章节整体认知本章核心内容为数据库的数据视图整体分为两大模块创建与查询视图、操作视图配套三套业务实训案例Petstore商业实例、LibraryDB综合实训、SchoolDB实战演练是数据库里非常重要的逻辑层对象。二、6.1 创建和查询视图6.1.1 视图概述视图属于数据库的虚拟表不存在物理存储空间本质是一条持久化存储在数据库内部的SELECT查询语句它本身不存储任何数据所有的数据都来源于底层的基础数据表也就是基表。每当执行查询视图的操作时数据库会自动解析视图内部保存的查询逻辑动态从基表中抓取数据生成表格形式的结果。视图可以分为简单视图与复杂视图简单视图基于单张基表构建不含聚合函数、分组、多表连接复杂视图由多表联合查询构成或是包含统计、去重、子查询等逻辑。视图具备四大核心价值简化复杂查询逻辑、管控数据访问权限、统一业务统计口径、隔离底层表结构变动降低后期维护成本。6.1.2 创建视图创建视图的核心工作是定义查询逻辑我们只需要确定需要关联哪些基表、筛选哪些字段、设置过滤条件不需要定义字段类型、约束这类存储结构。创建完成之后数据库只会记录视图的查询定义不会分配磁盘物理空间不需要向视图插入数据。对比数据表的创建数据表创建时必须设计字段、数据类型、各类完整性约束创建后会直接分配物理存储必须手动插入数据之后表内才有内容数据表定义的是存储结构视图定义的是查询逻辑二者本质完全不同。6.1.3 查询视图查询视图的使用方式和普通数据表完全一致使用者不需要感知视图背后关联了多少张基表屏蔽了底层复杂的关联关系。我们还可以查看视图的元数据信息调取视图原始的查询定义核对视图内部的业务逻辑是否符合需求。数据表查询是直接读取磁盘上已经持久化存储好的数据查询速度相对固定视图查询是动态拼接SQL再执行基表的数据一旦发生变化视图下一次查询结果会自动刷新永远是最新数据而数据表的数据不会自动变化必须手动执行更新操作才会改动。三、6.2 操作视图6.2.1 通过视图操作数据只有简单视图支持增、删、改的数据操作复杂视图不允许修改数据。对视图执行的数据操作并不会修改视图本身所有的新增、更新、删除动作都会映射到底层的基表上直接修改基表里面真实存储的数据。对比数据表的数据更新数据表可以无条件直接对自身数据进行增删改修改之后永久保存在磁盘视图的数据修改存在严格限制并且所有修改最终作用于基表视图自身只保存查询语句不存在可以修改的数据。6.2.2 修改视图定义修改视图定义本质是重写视图内部封装的查询语句可以调整视图的字段、筛选条件、关联的基表。修改视图只会改变查询逻辑完全不会影响基表的表结构和里面存储的数据。对比数据表的修改数据表的修改分为修改表结构和修改表数据修改表结构会直接改动物理存储的表设计修改数据会永久改变磁盘内容会对整个数据库产生实质性影响修改视图属于纯逻辑层面的调整无任何物理层面的改动。6.2.3 删除视图删除视图只会清除数据库中保存的视图定义语句仅仅销毁视图这个逻辑对象底层所有基表的结构、数据完全不受任何影响不会造成数据丢失。对比数据表的删除删除数据表会直接销毁磁盘上的表结构清空全部物理存储的数据表关联的索引、外键、依赖视图全部都会失效一旦删除无备份就无法恢复破坏性极强删除视图没有任何数据风险只移除一条查询逻辑。四、三大实训业务理解1. 商业实例Petstore数据视图任务1创建与查询视图围绕宠物商店的商品、订单、库存业务把商品表和订单表的联查逻辑封装成视图简化后台日常业务查询。任务2操作视图根据业务需求修改视图的筛选条件淘汰废弃的旧视图练习视图定义的修改与删除。2. 综合实训LibraryDB数据视图以图书馆业务为背景围绕读者、图书、借阅记录三张核心表常用视图有逾期借阅视图、热门图书统计视图用于图书馆的日常运营管理适合练习多表构成的复杂视图。3. 实战演练SchoolDB数据视图以学校数据库为场景包含学生、班级、成绩表主要用来创建学生成绩视图、不及格学生筛选视图是学习视图最经典的实训案例非常适合巩固简单视图的增删改知识点。五、数据表与视图核心对比总结作业重点要求1. 创建对比数据表定义物理存储结构设置字段、约束分配磁盘存储空间需要插入数据才有内容。视图定义查询逻辑只编写查询语句无物理存储不需要插入数据数据全部依赖基表。2. 更新对比数据表可以直接修改表结构、修改表内存储的数据改动永久落地在磁盘不受其他对象约束。视图只能修改内部查询定义不会影响基表结构仅简单视图可以操作数据所有数据修改都会同步给基表复杂视图只允许查询。3. 删除对比数据表删除会销毁表结构清空全部物理数据连带所有依赖对象失效存在数据丢失风险。视图删除仅移除查询语句定义基表数据和结构毫不受影响不存在任何数据安全问题。六、单元小结数据表是数据库的物理根基负责持久化存储业务原始数据视图是上层逻辑封装对象只用来简化查询、保障数据安全、统一业务口径。二者在创建、更新、删除的底层原理、执行效果、影响范围有着根本性区别。合理利用视图可以优化数据库架构减少重复开发工作也是数据库开发中必须熟练掌握的核心知识点。