SQL——视图

环境

  DBMS:MySQL 8.0.17

  工具:Navicat Premium 11.2.16

概述

  视图是从一个或多个基本表导出的虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以一旦基本表中的数据发生变化,从视图中查询出的数据也会随之改变。

  视图有以下优点:

  • 视图能够简化用户的操作。
  • 视图使用户能以多种角度看待同一数据。
  • 视图对重构数据库提供了一定程度的逻辑独立性。
  • 视图能够对机密数据提供安全保护。
  • 适当利用视图可以更清晰地表达查询。

创建

CREATE VIEW <视图名> AS <子查询>;

  与基本表一样,视图名也是唯一标识一个视图,所以视图名不能重复。

  不同的是,创建视图不是使用if not exists判断是否存在同名视图,而是使用create or replace,表示不存在同名视图则创建视图,存在同名视图则替换视图。

CREATE OR REPLACE VIEW <视图名> AS <子查询>;

  创建学生选课视图v_sc:

  

修改

ALTER VIEW <视图名> AS <子查询>;

  注意修改是使用alter关键字而不是用replace关键字。

  修改视图v_sc,增加成绩列:

  

删除

DROP VIEW <视图名>;

  删除视图不能使用is exists判断视图是否存在。

  删除视图v_sc:

  

查看

DESC <视图名>;

数据查询

  视图的数据查询与基本表的数据查询一样。视图和视图之间、基本表和视图之间都可以进行连接查询、嵌套查询和派生表查询。

  关系型数据库执行对视图的查询时,首先进行有效性检查,检查查询中涉及的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正了的查询。这一转换过程称为视图消解

数据操作

  由于视图是不实际存储数据的虚表,对视图的更新最终要转换为对基本表的更新。与视图查询一样,视图的更新操作也是通过视图消解转换为对基本表的更新操作。

  并不是所有的视图都可以更新。对于MySQL而言,以下视图不能进行更新:

  • 视图的字段中包含表达式、常数或函数。
  • 定义视图的子查询为分组查询、连接查询。
  • 定义视图时使用了distinct关键字去掉重复字段。
原文地址:https://www.cnblogs.com/lqkStudy/p/11482293.html