sql08视图

视图

对应概念模式的数据在SQL中被称为基本表(Table),而对应外模式的数据称为视图(View)。视图不仅包含外模式,而且包含其E-C映像。

SQL数据库结构

  • 基本表是实际存储于存储文件中的表,基本表中的数据是需要存储的
  • 视图在SQL中只存储其由基本表导出视图所需要的公式,即由基本表产生视图的映像信息,其数据并不存储,而是在运行过程中动态产生与维护的
  • 对视图数据的更改终要反映在对基本表的更改上

定义视图

  • 如果视图的属性名缺省,则默认为子查询结果中的属性名;也可以显式指明其所拥有的列名
  • with checkoption指明当对视图进行insert,update,delete时,要检查进行insert/update/delete的元组是否满足视图定义中子查询中定义的条件表达式

eg. 定义一个视图CompStud为计算机系的学生,通过该视图可以 将Student表中其他系的学生屏蔽掉

eg.定义一个视图Teach为教师任课的情况,把Teacher表中的个人隐私方面的信息,如工资等屏蔽掉,仅反映其教哪门课及其学分等。

使用视图:定义好的视图,可以像Table一样,在SQL各种语句中使用

示例:检索计算机系的所有学生,我们可使用CompStud

定义视图:有时可方便用户进行检索操作。

SQL视图更新:是比较复杂的问题,因视图不保存数据,对视图的更新最终要反映到对基本表的更新上,而有时,视图定义的映射不是可逆的。

SQL视图更新的可执行性

  • 如果视图的select目标列包含聚集函数,则不能更新
  • 如果视图的select子句使用了unique或distinct,则不能更新
  • 如果视图中包括了groupby子句,则不能更新
  • 如果视图中包括经算术表达式计算出来的列,则不能更新
  • 如果视图是由单个表的列构成,但并没有包括主键,则不能更新

对于由单一Table子集构成的视图,即如果视图是从单个基本表使用选择、投影操作导出的,并且包含了基本表的主键,则可以更新

撤消视图

  • Drop View view_name

撤消基本表

  • Drop Table 表名

立志做一名攻城狮