一、视图基础概念
视图是从一个表(或视图)中导出的虚拟表,视图是一个虚表,自身不会存储任何真实业务数据,数据库中只存储视图的定义。
注:视图一经定义就可以像表一样被查询,修改,删除和更新。
二、视图的创建,查询,更新,插入数据,修改数据,删除数据,删除操作对比
1.创建操作
数据表(TABLE)
特点:
- 创建时分配独立物理磁盘存储空间;
- 可完整定义字段、主键、外键、索引、各类约束;
- 录入的数据会永久保存在磁盘,独立存在。
视图(VIEW)
特点:
- 不占用物理存储,仅记录查询逻辑;
- 无法自定义主键、索引、字段约束;
- 完全依赖底层数据表,基表不存在则视图无法使用。
2.查询操作
数据表(TABLE)
特点:
- 直接读取磁盘上存储的实体数据,可搭配索引加速查询;
- 查询不受限制,支持聚合、多表连接、子查询、分组等全部 SQL 语法;
- 可自由指定任意字段、自定义筛选、排序逻辑。
视图(VIEW)
特点:
- 查询视图等价于执行视图封装的底层 SELECT 语句,再叠加本次查询条件;
- 视图本身无索引,底层查询速度取决于基表索引;
- 仅能查询创建视图时预先定义好的字段,无法访问基表未展示的隐藏字段;
- 简化查询书写,无需重复写复杂联表、筛选语句。
3.更新操作
数据表(TABLE)
完全支持增、删、改三类语句,操作会直接修改磁盘中存储的原始数据,修改永久生效;所有引用这张表的视图,查询结果会同步更新。
视图(VIEW)
更新存在严格限制,仅单表、无聚合函数、无 DISTINCT 去重、无分组、无连接查询的简单视图,才允许执行增删改;
对视图的数据操作,底层最终仍是修改基表;聚合视图、多表关联视图完全不支持更新。
4.插入数据操作INSERT
数据表(TABLE)
特点:
- 无前置限制,只要满足字段类型、主键、非空等表约束,即可直接插入;
- 插入的数据直接写入磁盘,永久保存;
- 插入完成后,所有引用该表的视图查询会同步显示新增数据
注:数据表和视图的插入数据操作一致,但存在严格限制
视图(VIEW)
限制条件,全部满足才能插入:
- 视图仅来源于单张数据表,无 JOIN 多表连接;
- 视图不含聚合函数、GROUP BY、DISTINCT 去重、UNION 合并;
- 基表所有非空、无默认值的字段,必须在视图中暴露,否则无法补全字段插入;
- 插入本质仍是向底层基表新增数据,视图自身不能单独存储数据;
- 不满足以上条件的视图,禁止执行 INSERT 插入操作。
5.修改数据操作UPDATE
数据表(TABLE)
- 无额外限制,直接修改磁盘原始数据;
- 修改永久生效,所有引用该表的视图查询结果同步更新。
视图(VIEW)
- 限制条件同 INSERT:仅限单表、无聚合、无分组、无去重的简单视图;
- 多表、聚合类视图不允许执行 UPDATE;修改底层仍是改动基表原始数据。
6.删除数据操作DELETE
数据表(TABLE)
- 可自由删除符合条件的数据行,仅清除数据、保留表结构;
- 删除后所有关联视图不再展示已删数据。
视图(VIEW)
限制和 INSERT、UPDATE 统一,仅简单单表视图支持;聚合、联表视图禁止删除;删除操作最终作用于底层基表。
注:6和7的删除操作一个是删除表和视图中的数据,一个是删除整个视图和表
7.删除操作
数据表(TABLE)
- 彻底销毁表结构、全部数据、索引、约束;
- 所有依赖该表的视图直接失效、无法使用
视图(VIEW)
- 仅删除视图的查询逻辑定义;
- 底层数据表、原始数据、索引完全不受影响。
三、数据表与视图对比
| 操作维度 | 实体数据表 TABLE | 视图 VIEW |
|---|---|---|
| 存储形式 | 物理磁盘存储,占用独立空间 | 虚拟逻辑,仅存查询语句,无数据存储 |
| 创建功能 | 可定义字段、主键、索引、各类约束 | 仅封装 SELECT 查询,无法设置索引与约束 |
| 查询 SELECT | 全语法支持,可借助索引提速,全字段可见 | 复用内置查询,仅能读取预设字段,无独立索引 |
| 插入 INSERT | 满足表约束即可自由新增数据 | 仅单表无聚合视图可插入,需补齐基表必填字段 |
| 修改 UPDATE | 无额外限制,直接修改磁盘原始数据 | 仅简单单表视图支持,聚合 / 联表视图不可更新 |
| 删除行 DELETE | 自由删除数据,保留表结构 | 仅简单单表视图可删除记录,底层改动基表 |
| 销毁结构 DROP | 清空表结构 + 全部数据,关联视图失效 | 仅删除视图定义,底层数据表完好无损 |
| 依赖关系 | 完全独立,不依附其他对象 | 必须依托至少一张实体数据表存在 |