数据库系统原理
  • 数据库系统原理
  • 引言
    • 数据库系统概述
  • 关系模型介绍
    • 关系数据库结构
    • 数据库模式
    • 关系代数
      • 选择运算
      • 投影运算
      • 笛卡尔运算
      • 连接运算
      • 集合运算
      • 其他运算
  • SQL介绍
    • SQL语言分类
    • SQL数据类型
    • SQL数据库操作
    • SQL数据表操作
    • SQL数据操纵语言
    • SQL数据查询语言
    • 集合运算
    • 聚集函数
  • 中级SQL
    • 连接查询
    • 内连接
    • 外连接
    • 交叉连接和自连接
    • 视图
    • 完整性约束
    • SQL用户和授权
  • 高级SQL
    • 函数
    • 存储过程
    • 触发器
  • ER模式数据库设计
    • 数据库设计过程概览
    • 需求分析
    • 实体-联系模型
      • 复杂属性
      • 映射基数和弱实体集
    • 将E-R图转换为关系模式
    • E-R模型设计
  • 关系数据库设计
    • 数据库设计规范化
    • 函数依赖理论
    • 关系范式
  • 半结构化数据
    • 半结构化数据
  • 应用程序开发
    • ADO.NET访问数据库技术
    • 断开模式数据查询
    • 连接模式数据更新
  • 数据存储结构
    • 磁盘
    • 文件的存储
    • 文件的逻辑结构
    • 文件组织
  • 索引
    • 索引基本概念
    • B树索引
    • B+树索引
    • MySQL索引的基本语法
    • 联合索引
  • 查询处理
    • 查询处理概述
  • 查询优化
    • 查询优化概述
    • 查询树的启发式优化(代数优化算法)
  • 事务
    • 事务的概念
    • 事务的特性
    • MySQL事务处理
    • 可串行化
  • 并发控制
    • 并发控制概述
    • 封锁
    • 两阶段封锁协议封锁
    • 多粒度封锁
    • 活锁和死锁
    • 基于时间戳排序的并发控制
    • 乐观控制法
  • 恢复系统
    • 数据库恢复概述
    • 数据库恢复的实现技术
    • 基于检查点的数据库恢复
Powered by GitBook
On this page
  • 基本概念
  • 创建视图
  • 水平视图
  • 投影视图
  • 联合视图
  • 查看视图
  • 修改视图
  • 删除视图
  • 使用视图
  • 更新视图
  • 物化视图和普通视图的区别
  1. 中级SQL

视图

Previous交叉连接和自连接Next完整性约束

Last updated 4 months ago

基本概念

  1. 视图是一个虚拟表,其内容来自对表查询的基础上

  2. 视图的行和列数据来自于定义视图的查询所引用的表,并在引用表时动态生成

  3. 视图的结构和显示的数据行并没有实际地以视图结构存储在数据库中,而是存储在视图所引用的基本表中

  4. 视图集中、简化和自定义每个用户对数据库的不同认识,是数据库的外模式。用户可以将数据库中自己感兴趣的特定数据展现在视图中。

  5. 视图也可以作为一种安全机制,允许用户通过视图访问数据,而不授予用户直接访问视图基础表的权限

创建视图

CREATE VIEW [ < owner > .] view_name [ ( column_name [ ,...n ] ) ]
AS
select_statement
FROM table_name WHERE search_condition
[WITH CHECK OPTION]
  • view_name :为新创建的视图指定的名字,视图名称必须符合标识符原则。

  • column_name :在视图中包含的列名,也可以在select 语句中指定列名

  • table_name :视图基表的名字

  • select_statement :选择哪些列进入视图的select 语句。

  • where search_condition :基表数据进入视图所应满足的条件。

  • with check_option :迫使通过视图执行的所有数据修改语句必须符合视图定义中设置的条件。

在创建视图时,应首先测试select语句以确保能够返回正确的结果

创建视图的步骤:

  1. 编写用于创建视图的select 语句。

  2. 对select 语句进行测试。

  3. 检查测试结果是否正确,是否和预期的一样。

  4. 创建视图。

水平视图

视图的常见用法是限制用户只能存取表中的某些数据行,用这种方法产生的视图称为水平视图,即表中行的子集。

投影视图

如果限制用户只能存取表中的部分列数据,那么使用这种方法创建的视图就称为投影视图,即表中列的子集。

联合视图

使用视图的一个原因是简化多表查询,可以生成从多个表中提取数据的联合视图(joined view) 把查询结果表示为一个单独的“可见表”。

查看视图

MySQL:desc view_name

SQL:sp_help view_name

修改视图

ALTER VIEW view_name
AS
select_statement
FROM table_name WHERE search_condition
[WITH CHECK OPTION]

和创建视图基本类似,保留视图名称,换了查询语句。

删除视图

Drop View view_name

使用视图

  • 对视图的查询和对基本表查询一样;

  • 系统执行视图查询时是把它转换成等价的对基本表的查询;

更新视图

对视图的更新最终要转换成对基本表的更新。

视图的更新条件:

  1. 视图必须未涉及连接;(涉及了多个表)

  2. 视图必须不包含Group by 子句;(不是表原始的内容)

  3. 视图不能包含任何组合函数;(不是表原始的内容)

  4. 不能使用distinct 子句;(删除了部分表的内容)

  5. where 子句不能包含表的嵌套引用;(涉及了多个表)

物化视图和普通视图的区别

Oracle支持物化视图,MySQL、SQL Server不支持物化视图。

视图的优点

  • 查询的简单性:将复杂的查询定义为视图,保留用户所关心的数据内容,简化用户浏览和操作;

  • 安全保护:视图可以设置不同用户对数据的访问权限;

  • 屏蔽数据的复杂性:简化用户对数据库的操作,还可以使用视图重新组织数据;

视图的缺点

  • 性能降低

  • 修改的限制

视图是简化设计、清晰编码的东西,并不是提高性能的,它的存在只会降低性能。

  • 普通视图就是一个虚拟表,不占磁盘空间

  • 物化视图是存在的,占内存

  • 普通视图的查询实际上还是对SQL的查询,并不能提高性能,只是看起来直观、简便

  • 物化视图是对查询结果的预运算,用于需要对查询立即做出响应,而又需要耗费很长时间获得结果。物化视图必须能快速更新,它取决于对更新频率和内容准确性的要求。

CREATE Materialized VIEW [ < owner > .] view_name [ ( column_name [ ,...n ] ) ]
AS
select_statement
FROM table_name WHERE search_condition
  1. 物化视图的优点

    • 提高查询性能:物化视图可以避免一些重复的JOIN 操作,从而提高查询性能(连接一次就存下来了)

    • 减少对资源的依赖:物化视图可以将部分数据存储到内存中,避免频繁读取磁盘文件

    • 对复杂查询的支持:物化视图可以处理复杂的查询,如聚合查询、分组查询等(普通视图是不能更新这些的)

  2. 物化视图的缺点

    • 一致性问题:物化视图中的数据可能会和原始数据不一致,需要定期的刷新来保证数据的一致性

    • 存储空间问题:物化视图需要占用存储空间,如果数据量过大,可能会占用大量的存储空间

    • 更新效率问题:物化视图的更新需要耗费一定的时间,如果更新频率过高,可能会影响系统的正常运行

物化视图是一个实际存在的表,而不是一个虚拟表。物化视图的数据存储在磁盘上,它可以提高查询性能。