一、章节整体认知
本章核心内容为数据库的数据视图,整体分为两大模块:创建与查询视图、操作视图,配套三套业务实训案例(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. 删除对比
数据表:删除会销毁表结构,清空全部物理数据,连带所有依赖对象失效,存在数据丢失风险。
视图:删除仅移除查询语句定义,基表数据和结构毫不受影响,不存在任何数据安全问题。
六、单元小结
数据表是数据库的物理根基,负责持久化存储业务原始数据;视图是上层逻辑封装对象,只用来简化查询、保障数据安全、统一业务口径。二者在创建、更新、删除的底层原理、执行效果、影响范围有着根本性区别。合理利用视图可以优化数据库架构,减少重复开发工作,也是数据库开发中必须熟练掌握的核心知识点。