zoukankan      html  css  js  c++  java
  • 【SQL】视图

    一、虚拟视图

    由create table定义的表:以物理形式存在,实际存储在数据库中

    视图虚拟的,并不是一个真正存在的表

    1.视图定义

    CREATE VIEW <视图名> AS <视图定义>

    例1.

    CREATE VIEW ParamountMovies AS
        SELECT title, year
        FROM Movies
        WHERE studioName = 'Paramount';

    例2.涉及多个表

    CREATE VIEW MovieProd AS
        SELECT title, name
        FROM Movies, MovieExec
        WHERE producerC# = cert#;

    例3.涉及属性重命名

    CREATE VIEW MovieProd(movieTitle, prodName) AS
        SELECT title, name
        FROM Movies, MovieExec
        WHERE producerC# = cert#;

    2.视图查询

    跟查询普通的表一样。

    3.视图更新

    理论上,视图的更新没有意义,因为它是虚拟的。

    但是,特别简单的视图可以更新,其本质是更新了与视图相关的实体表。

    3.1视图删除

    DROP VIEW ParamountMovies;

    删除视图不会影响实体表,但是删除了实体表会导致相应的视图不可用。

    3.2可更新视图

    只有简单的视图才可以更新,说白了,就是视图简单到可以更新视图的数据明确的找到实体表应该调整的地方,让实体表做真正的更新。

    可更新视图的条件:

    1.视图仅从单个关系R中选出

    2.用SELECT而非SELECT DISTINCT选出

    3.WHERE 子句中不能使用R

    4.SELECT中的属性必须足够多,保证对R插入时可以通过默认值的填充剩下的值。

    语句跟普通的插入更新语句相同。

    3.3更新视图时的不合理现象

    对下面的视图:

    CREATE VIEW ParamountMovies AS
        SELECT title, year
        FROM Movies
        WHERE studioName = 'Paramount';

    采用插入操作

    INSERT INTO ParamountMovies
    VALUES('Star Trek',1979);

    由于并没有在插入时指明studioName = 'Paramount',导致插入到实体表R中的语句无法在视图中被检索出来。这是显然不合理的。

    解决方法:

    1.定义视图时就把studioName属性加入

    2.采用替换触发器

    CREATE TRIGGER ParamountInsert
    INSTEAD OF INSERT ON ParamountMovies
    REFERENCING NEW ROW AS NewRow
    FOR EACH ROW
    INSERT INTO Movies(title, year, studioName)
    VALUES(NewRow.title, NewRow.year, 'Paramount');

    INSTEAD OF表明替换:即原本的操作不会被执行,而是执行触发器中的动作!

    二、物化视图

    物化视图:把视图存储在存储空间中,让视图不在是虚拟的。

    物化视图的维护:

    1.定期维护:比如每24小时重新生成一次,在实时性要求不高时可以采用

    2.增量维护:当基本表变化时,根据其变化情况对物化视图做少量的修改。不用重新生成整个表。

    物化视图的生成、维护也需要代价,但是在多个表连接查询等情况,用物化视图可以减少时间的消耗。

    用物化视图代替基本表也有很多的要求,本质是保证查询不会出错。

    具体物化视图的知识还需要再学习。

  • 相关阅读:
    defence系列的网游不错,我信网游能挣钱了,做得太好了
    关于Debug和Release之本质区别的讨论
    phpmyadmin设置密码,不用登录直接进入
    北京可以备案什么域名
    如何将本地文件复制到远程服务器听语音
    win7 64位wamp2.5无法启动MSVCR110.DLL丢失听语音
    最大连接数:60 iops:150 什么概念?
    about diigo
    Install Microsoft fonts in Ubuntu Linux
    a crawler base on libevent
  • 原文地址:https://www.cnblogs.com/dplearning/p/4887965.html
Copyright © 2011-2022 走看看