MySQL 视图学习笔记(含视图与数据表 CRUD 对比)

📅 2026/7/7 18:45:14
MySQL 视图学习笔记(含视图与数据表 CRUD 对比)
一、视图基础概念1. 什么是视图视图View是虚拟表本身不存储真实数据本质是一条预编译好的SELECT查询语句。 视图的数据来源于底层一张 / 多张物理数据表查询视图时会动态执行内置 SQL返回临时结果集。2. 视图核心作用简化复杂查询多表联查、聚合统计封装成视图使用者直接查视图不用重复写长 SQL数据权限隔离只开放视图给用户隐藏底层原始表敏感字段手机号、工资、身份证统一数据口径业务报表固定查询逻辑所有人查同一份视图避免 SQL 写法不一致导致结果偏差逻辑解耦底层表结构微调时只需修改视图定义上层业务代码无需改动。二、视图的增删改查CRUD 完整语法1. 创建视图 CREATE VIEW基础语法sqlCREATE [OR REPLACE] VIEW 视图名 [(字段别名1,字段别名2,...)] AS SELECT 查询语句 [WITH CHECK OPTION];OR REPLACE视图存在则覆盖重写不存在则新建WITH CHECK OPTION限制通过视图新增 / 修改的数据必须满足视图WHERE筛选条件防止操作后数据从视图消失。示例sql-- 基于学生表student创建视图只展示男生信息 CREATE OR REPLACE VIEW v_student_boys AS SELECT id,name,age,class FROM student WHERE gender男 WITH CHECK OPTION;2. 查询视图 SELECT视图和普通表查询语法完全一致sql-- 查询视图全部数据 SELECT * FROM v_student_boys; -- 带条件筛选视图 SELECT name,age FROM v_student_boys WHERE age16;3. 更新视图新增 / 修改INSERT / UPDATE新增数据sqlINSERT INTO v_student_boys(id,name,age,class) VALUES(101,张三,17,高一1班);开启WITH CHECK OPTION后无法插入gender女的数据会直接报错。修改数据sqlUPDATE v_student_boys SET age18 WHERE id101;视图更新限制重点满足以下任意一条视图不可更新包含聚合函数SUM/COUNT/MAX/MIN/AVG使用GROUP BY / HAVING / DISTINCT去重分组使用UNION / UNION ALL合并多表结果使用子查询、多表 JOIN 联查使用SELECT *之外的计算字段如age1。4. 删除视图 DROP VIEWsql-- IF EXISTS 避免视图不存在时报错 DROP VIEW IF EXISTS v_student_boys;5. 查看视图定义sql-- 查看建视图语句 SHOW CREATE VIEW v_student_boys; -- 查询数据库内所有视图 SHOW FULL TABLES WHERE TABLE_TYPEVIEW;三、视图 VS 物理数据表CRUD 全方位对比表格操作维度视图View物理数据表Table存储本质虚拟表无磁盘物理存储仅存查询 SQL数据实时从基表读取真实物理文件行数据、索引、约束永久保存在磁盘创建 CREATECREATE VIEW仅保存查询逻辑瞬间完成不占用存储空间CREATE TABLE分配磁盘空间定义字段、主键、索引、约束查询 SELECT语法和表完全一致查询时动态执行内置 SQL性能略低于直接查表直接读取磁盘数据可通过索引加速查询效率更高新增 INSERT仅简单单表无聚合视图可插入受WITH CHECK OPTION约束写入实际修改底层基表无特殊限制支持批量插入、自增主键、默认值、外键约束校验修改 UPDATE仅简单单表视图可更新修改同步作用到底层基表分组 / 聚合视图禁止更新自由更新支持事务、锁、触发器、字段约束校验删除 DELETE仅简单单表视图可删除删除底层基表真实数据带条件限制完整支持删除可关联多表、批量删除支持级联删除删除对象 DROP VIEW / DROP TABLE删除视图仅删除查询定义底层原始表数据完全保留删除表会清空全部数据、销毁索引、约束、表结构数据无法恢复索引支持不支持创建索引无索引概念支持主键索引、唯一索引、联合索引、全文索引约束支持无主键、外键、非空、默认值约束完整支持主键、外键、NOT NULL、UNIQUE、CHECK 约束数据独立性基表数据变更视图查询结果自动同步视图修改不影响基表结构表结构修改会直接影响所有依赖该表的 SQL、视图、程序四、视图核心优缺点总结优点数据安全精细化控制字段可见范围屏蔽敏感信息使用便捷复杂查询封装减少重复 SQL 编写业务统一统一报表查询逻辑避免统计口径混乱兼容扩展底层表调整时通过视图屏蔽变更上层业务无感知。缺点性能损耗查询视图等价执行嵌套 SQL多表视图查询效率偏低更新限制多聚合、分组、多表视图无法新增 / 修改 / 删除调试困难多层视图嵌套时SQL 执行链路复杂排查慢无独立存储无法给视图建索引大数量场景查询压力大。五、使用场景与避坑推荐使用场景对外数据报表、后台统计页面给第三方 / 普通员工开放只读数据隐藏敏感字段高频重复的多表联查逻辑封装。不推荐场景高并发、大数据量实时查询需要频繁增删改数据的业务主表多层视图嵌套超过 2 层可读性、性能大幅下降。常见坑忘记WITH CHECK OPTION通过视图插入不符合筛选条件的数据导致数据在视图中不可见对分组、聚合视图执行UPDATE/INSERT直接抛出语法错误删除视图误以为会删除底层表数据二者完全独立多层视图嵌套底层基表索引失效查询速度暴跌。