MySQL 单元 6 数据视图学习笔记
一、视图基础概述1. 视图是什么视图是虚拟表本身不存储真实数据仅保存一条SELECT查询语句访问视图时数据库会执行这条 SQL动态拼接基表数据返回结果。底层依赖一张 / 多张物理数据表基表所有数据源头都来自基表。2. 视图核心作用简化复杂多表查询封装常用查询逻辑不用重复写长 SQL权限隔离只给用户开放视图隐藏基表敏感字段手机号、薪资统一数据展示口径多业务端查询格式一致逻辑解耦业务变更只需修改视图定义不用改动前端大量查询代码。二、视图核心操作创建 / 查询 / 修改 / 删除VS 数据表操作对比一创建操作对比1. 创建数据表物理表存真实数据语法CREATE TABLE 表名(字段1 类型 约束,字段2 类型 约束 );特点在磁盘分配物理存储空间插入数据后永久保存必须定义字段数据类型、主键、外键、索引、存储引擎独立实体和其他表是并列存储关系。2. 创建视图虚拟表仅存查询逻辑语法CREATE VIEW 视图名 ASSELECT 字段 FROM 基表 WHERE 条件;扩展语法带校验CREATE VIEW 视图名 WITH CHECK OPTION AS SELECT ...;特点无物理存储只保存查询语句不需要定义字段类型字段直接继承基表依赖基表基表删除则视图失效WITH CHECK OPTION限制通过视图新增 / 修改的数据必须满足视图查询条件。二查询操作对比1. 查询数据表SELECT * FROM 数据表 WHERE 条件;直接读取磁盘存储的完整原始数据可查询所有字段。2. 查询视图SELECT * FROM 视图名 WHERE 条件;执行流程先读取视图保存的SELECT语句查询基表再过滤返回结果只能查询视图定义中包含的字段基表隐藏字段无法访问。三更新 / 修改操作对比1. 修改数据表改结构 / 改数据修改表结构ALTER TABLEALTER TABLE 表名 ADD 字段;ALTER TABLE 表名 MODIFY 字段 新类型;修改表内数据UPDATEUPDATE 表 SET 字段值 WHERE 条件;可任意修改所有字段不受额外限制。2. 修改视图两种修改维度修改视图定义 SQLALTER VIEWALTER VIEW 视图名 AS 新SELECT语句;通过视图更新基表数据INSERT / UPDATE / DELETEUPDATE 视图 SET 字段值;INSERT INTO 视图(字段) VALUES();严格限制以下视图不能更新数据包含聚合函数SUM/COUNT/MAX、GROUP BY分组使用DISTINCT去重、多表连接JOIN、子查询定义中包含UNION合并结果集设置WITH CHECK OPTION时修改后数据不满足视图条件会报错。四删除操作对比1. 删除数据表DROP TABLE IF EXISTS 表名;彻底删除磁盘上的物理数据、表结构、索引、约束若存在外键关联其他表直接删除会报错需先解除外键。2. 删除视图DROP VIEW IF EXISTS 视图名;仅删除视图的查询定义完全不影响底层基表和真实数据无外键约束干扰删除操作不会改动任何原始业务数据。三、视图实操完整案例Petstore 商业实例任务 1创建与查询视图基于宠物商品表 pet、分类表 category创建只展示猫狗商品的视图-- 创建视图 CREATE VIEW v_pet_dog_cat ASSELECT p.pet_id,p.name,p.price,c.cate_nameFROM pet pJOIN category c ON p.cate_idc.cate_idWHERE c.cate_name IN (猫,狗);-- 查询视图SELECT * FROM v_pet_dog_cat WHERE price200;任务 2操作视图更新、删除视图-- 通过视图修改基表数据无聚合可更新UPDATE v_pet_dog_cat SET price150 WHERE pet_id101;-- 修改视图定义新增库存字段ALTER VIEW v_pet_dog_cat ASSELECT p.pet_id,p.name,p.price,p.stock,c.cate_nameFROM pet pJOIN category c ON p.cate_idc.cate_idWHERE c.cate_name IN (猫,狗);-- 删除视图DROP VIEW IF EXISTS v_pet_dog_cat;五、视图 vs 数据表 核心差异汇总表对比维度数据表物理表视图虚拟表存储特性磁盘存储真实数据占用存储空间仅存储查询 SQL无真实数据不占数据空间依赖关系独立实体不依赖其他对象依赖底层基表基表删除视图失效创建方式定义字段、类型、约束、引擎基于 SELECT 查询语句创建无字段定义数据更新无特殊限制可随意增删改存在大量限制聚合 / 多表视图无法更新删除影响删除后数据、结构全部丢失仅删除查询逻辑基表数据完好无损核心用途持久化存储业务原始数据封装查询、权限控制、简化复杂 SQL补充视图拓展知识点一、视图更新的完整限制清单满足以下任意一种视图不支持 INSERT/UPDATE/DELETE包含聚合函数SUM()、COUNT()、MAX()、MIN()、AVG()使用 GROUP BY、HAVING 分组统计使用 DISTINCT 去重多表 JOIN 连接查询使用 UNION / UNION ALL 合并结果集视图字段使用常量、表达式计算如 age10 AS new_age使用子查询、窗口函数。二、视图、临时表、派生表三者区分易混淆对比视图永久存储视图定义数据库重启仍存在可重复使用虚拟无数据临时表物理存储数据会话结束自动销毁独立实体可建索引派生表写在FROM()里的子查询仅单次查询生效用完立刻销毁。三、视图常见使用场景贴合课本三大案例教学库 SchoolDB创建学生成绩视图隐藏手机号、家庭住址只展示学号、姓名、各科分数分配给授课老师使用。宠物店 Petstore创建热销商品视图自动过滤库存 0、销量前 100 商品运营人员直接调取商品列表。图书馆 LibraryDB创建逾期借阅视图关联读者、图书、借阅表自动筛选超期未还记录简化管理员查询。四、易错坑点补充删除视图DROP VIEW不会删基表删除基表DROP TABLE视图会变成无效视图修改视图用ALTER VIEW不能用ALTER TABLE视图没有字段结构修改语句单表无聚合视图可以更新但更新的数据会直接同步到原始物理表视图不存储数据基表数据实时更新视图查询结果会同步变化不能给视图添加主键、外键、索引约束全部依赖底层基表。五、补充对比视图 vs 数据表 新增对比维度对比项数据表视图索引支持可创建主键、普通、联合索引完全不支持创建索引约束类型主键、外键、唯一、非空、默认值仅支持WITH CHECK OPTION行校验约束生命周期永久存在手动 DROP 才删除永久存储定义仅查询时动态生成数据存储占用占用磁盘存储真实行数据仅保存一段 SQL 文本几乎无存储开销事务影响DML 操作直接锁原始数据行DML 本质操作基表锁表逻辑和直接查表一致