MySQL数据库视图知识点整理
6.1 视图的创建与查询
6.1.1 视图基础概念
视图属于逻辑虚拟数据表,本身不存储真实业务数据,所有数据均源自底层实体基础表。数据库仅持久保存视图对应的查询逻辑,不会存储视图查询结果;每次访问视图时,MySQL会自动执行视图绑定的SELECT查询,实时从底层数据表读取数据。
使用视图四大核心优势
1. 简化复杂查询逻辑:将多表联查、多层筛选的复杂SQL封装为视图,后续业务查询直接调用视图,无需重复编写冗长语句
2. 按需展示数据:可过滤冗余字段、筛选有效数据,仅对外暴露业务需要的内容
3. 屏蔽数据表底层关联:使用者无需掌握多张基础表的关联逻辑,降低使用门槛
4. 提升数据库权限安全:无需向用户开放完整实体表访问权限,仅分配视图查询权限,隔离敏感原始数据
6.1.2 视图创建语法
标准创建语句:
sql
CREATE [OR REPLACE] VIEW 视图名称 [(自定义列别名)]
AS SELECT 数据查询语句
[WITH [CASCADED | LOCAL] CHECK OPTION];
关键字释义
- OR REPLACE :若数据库内已存在同名视图,直接覆盖原有视图定义
- WITH CHECK OPTION :通过视图新增、更新数据时,录入内容必须匹配视图WHERE筛选条件,不符合则操作失败
- LOCAL :校验规则仅作用于当前视图,不向上追溯依赖视图
- CASCADED (默认规则):校验时同时校验当前视图与上层所有依赖视图的筛选条件
创建视图硬性限制
1. 同一数据库下,视图名称不可与数据表重名
2. 视图无法创建主键、索引、外键约束
3. 视图内的SELECT语句存在使用限制:不能嵌套FROM子查询、无法引用存储过程变量等
6.1.3 视图查询方式
视图查询语法和实体数据表完全通用,使用方式无差别:
sql
SELECT * FROM 视图名称 WHERE 筛选条件;
关键注意事项
当底层基础表新增字段后,已创建完成的旧视图不会自动同步新增字段,需要重新执行创建语句更新视图定义。
6.2 视图的增删改操作
6.2.1 通过视图操作数据(增/改/删)
仅可更新视图支持INSERT、UPDATE、DELETE操作,视图满足以下任意一种条件则无法更新:
1. 查询包含聚合函数:SUM、AVG、COUNT等
2. 使用分组、去重、合并关键字:GROUP BY、HAVING、DISTINCT、UNION
3. FROM子句关联两张及以上实体表
INSERT 插入规则
若视图配置 WITH CHECK OPTION ,插入数据必须满足视图筛选条件;
底层实体表存在非空字段,但该字段未在视图中展示时,无法执行插入操作。
UPDATE 更新规则
多表关联视图执行更新时,单次操作仅能修改其中一张表的字段,不允许同时修改多张关联表数据。
DELETE 删除规则
重要规定:关联多张数据表的视图,不支持执行DELETE删除语句。
6.2.2 修改已有视图定义
语法:
sql
ALTER VIEW 视图名称
AS SELECT 全新查询逻辑;
6.2.3 删除视图语句
sql
DROP VIEW [IF EXISTS] 视图1,视图2;
IF EXISTS 作用:当目标视图不存在时,执行语句不会抛出报错;支持一条语句批量删除多个视图。
章节核心考点汇总
1. 视图本质是虚拟表,无独立物理存储空间,数据实时取自基础表或其他视图
2. WITH CHECK OPTION 约束作用:管控插入、更新的数据,强制匹配视图筛选条件
3. 多表视图操作限制:UPDATE仅能单表修改,完全禁止DELETE删除操作
4. 底层基础表扩充字段后,原有视图不会自动同步,需重建视图生效