精华内容
下载资源
问答
  • 视图定义删除SQL语言

    千次阅读 2019-06-13 19:41:32
     同时这个情况也满足了视图定义的基本格式中一定要给出视图列名的第一种情况:目标列(即指的是select语句中的列)不是单纯的属性名,而是列表达式。 【例四】将学生的学号以及他的平均成绩定义为一个视图。 ...
    视图的定义与删除SQL语言 2008-11-05 19:23:42 阅读90 评论0   字号:大中小 订阅 .

             

               视图是从一个或者几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍然存放在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出来的数据也就随之变化。从这个意义上讲,视图就像是一个窗口,透过它能看到数据库中自己感兴趣的数据及其变化。

                视图一经定义,就可以和基本表一样被查询、被删除。也可以在一个视图上再定义新的视图,但是对视图的变更(增、删、改)操作有一定的限制。

    一、建立视图(create view)

         使用SQL语言,格式如下:

                            create  view    视图名   【(列名,列名,。。。。)】

                             as   子查询

                            【 with    check    option】  ;

            备注:1、子查询(即select。。。from。。。where。。。)可以是任意复杂的select语句,但是通常不允许

                            含有order by 子句和distinct短语。

                       2、“with check option”表示对视图进行update、insert、delete操作时要保证更新、插入或者删除的

                             行满足视图定义中的谓词条件(即子查询中的条件表达式)。若没有此项要求时,可以不能写、

                            “with check option”语句。

                        3、组成视图的属性列名或者全部省略或者全部指定,不能对其进行部分指定。

                        4、有时可以不写出各列名,但是在下面三种情况下必须明确指定组成视图的所有列名:

                               (1)某个目标列不是单纯的的属性名,而是聚集函数或者列表达式;

                               (2)多表连接时选出了几个同名列作为视图的字段;

                               (3)需要在视图中为某个列启用新的更合适的名字。

                          5、格式中带有“【】”的内容,不是格式的必要组成部分,只要在需要的时候写出即可。

                  【例一】建立信息系学生的视图,并要求在修改和插入操作时仍需保证该视图只有信息系的学生。

                     create  view  is-student

                     as

                     select  sno,sname,sage

                     from student

                    where sdept='IS'

                    whth check option;                      实现在对视图进行修改、插入、删除操作时仍然满足子查询中

                                                                               的条件表达式



    概念定义: 行列子集视图:若一个是从单个表导出的,并且只是去掉了基本表的某些行和某些列,但是保留了主码,称这类视图为~

    虚拟列:视图中的某些列并不是从基本表中直接查询到数据,而是基本表的数据计算出来的,这些数据并不真实存在在表中。

    带表达式的视图:带有虚拟列的视图又称为~

    【例二】建立信息系选修了1号课程的学生的视图。

    create  view IS-SI (sno ,sname, grade)

    as

    select student.sno,sname,grade

    From student , sc

    where sdept='IS'   and  student.sno=cs.sno    and sc.cno=’1’;

    备注:由于在这两个表中都涉及到学号sno,所以在select时要明确指出来取的是哪一个sno,所以在sno前面要加上表名student.sno ,以免混淆。

    在where条件子句中,要把这个条件加上student.Sno=cs.Sno ,将两个表连接起来。

    满足必须要写出视图各列名的第二种情况:多表连接时选出了几个同名列作为视图的字段。

    【例三】反应学生出生年份的视图

    create   view  BT-S (sno , sname  , sbirth)

    as

    select  sno, sname , 2008-sage        

    from student  ;

    备注:视图中的列可以是从基本表中得到的数据经过计算得来的,select语句中可以是一个表达式。

      同时这个情况也满足了视图定义的基本格式中一定要给出视图列名的第一种情况:目标列(即指的是select语句中的列)不是单纯的属性名,而是列表达式。

    【例四】将学生的学号以及他的平均成绩定义为一个视图。

    create view  S-G (sno , gavg)           满足格式中必须写出视图列名的第一种情况:目标列是一个聚集函数

    as

    select  sno, AVG(grade)                     目标列是一个聚集函数

    from sc

    group by sno ;                                  得到的结果按照学号分组,即学号相同的在一起,实现将一个学生的不

                                                                 同课程成绩放在一起,然后再写下一个学生的成绩

    【例五】将student表中所有女生记录定义为一个视图。

    create   view   F-student (F-sno,name,sex,age,dept)

    as

    select  *                                                                 *表示要建立的视图F-student的属性列与studet表的属性列

                                                                                    一一对应,所以可以不必一一列出,*代表全部。

    from   student

    where ssex='女' ;

     

    二、删除视图(drop view)

    格式如下:drop  view   视图名  【cascade】

    备注:cascade(级联),表示要将该视图和由它导出的所有视图一起删除。如果不加cascade时,则表示如果该视图涉及到了其他视图,则拒绝执行删除。

    加了“【】”表示:不是格式的必要组成部分,需要的时候写。

    三、对视图进行更新和查询和对基本表的操作相同

    转载于:https://my.oschina.net/dminter/blog/205030

    展开全文
  • 视图是一个可视化的表。视图中的字段就是来自一个或多个数据库中的真实...现在要在这个视图基础上,删除 性别 这一列,使用关键字 alter, 语句如下。 alter view view_s as ( select s.sno as 学号, s.sn as 姓名
  • SQL语句(四)视图定义、查询、更新和删除

    万次阅读 多人点赞 2018-07-16 16:54:32
    一、视图定义 CREATE VIEW 视图名 AS 子查询 WITH CHECK OPTION //可以省略 二、视图查询、更新 和基本表的查询语句类似,只是把表名的位置换成视图名就可以 三、视图删除 DROP VIEW 视图名 【CASCADE】//...

    一、视图定义

    CREATE VIEW 视图名

    AS 子查询

    WITH CHECK OPTION //可以省略

    二、视图查询、更新

    和基本表的查询语句类似,只是把表名的位置换成视图名就可以

    三、视图删除

    DROP VIEW 视图名 【CASCADE】//CASCADE为级联删除,可以省略

    四、实例

    1.创建一个“上海晓莉贸易商行”供应商供应的零件视图V_DLMU_PartSupp1,要求列出供应零件的编号、零件名称、可用数量、零售价格、供应价格和备注等信息。
    CREATE VIEW V_DLMU_PartSupp1
    AS
    SELECT
    part.partkey,part.name,availqty,retailprice,supplycost,part.comment
    FROM part,supplier,partsupp
    WHERE part.partkey=partsupp.partkey
         AND partsupp.suppkey=supplier.suppkey
         AND supplier.name='上海黎顺服装经营部';
    SELECT *
    FROM V_DLMU_PartSupp1;
    2. 创建一个视图V_CustAvgOrder,按照顾客统计平均每个订单的购买金额和零件数量,要求输出顾客编号,姓名,平均购买金额和平均购买零件数量。
    CREATE VIEW V_CustAvgOrder(custkey,cname,avgprice,avgquantity)
    AS
    SELECT customer.custkey,customer.name,AVG(totalprice),AVG(quantity) 
    FROM customer,orders,lineitem
    WHERE customer.custkey=orders.custkey AND orders.orderkey=lineitem.orderkey
    GROUP BY customer.custkey,customer.name;
    
    SELECT *
    FROM V_CustAvgOrder;
    3.使用WITH CHECK OPTION,创建一个上海黎顺服装经营部供应商供应的零件视图V_DLMU_PartSupp2,要求列出供应零件的编号、可用数量和供应价格等信息。然后通过该视图分别增加、删除和修改一条“上海黎顺服装经营部”零件供应记录,验证WITH CHECK OPTION是否起作用。
    CREATE VIEW V_DLMU_PartSupp2
    AS
    SELECT partkey,suppkey,availqty,supplycost
    FROM partsupp
    WHERE suppkey=
                  (
                  SELECT suppkey
                  FROM supplier
                  WHERE name='上海黎顺服装经营部'
                  )
    WITH CHECK OPTION;
    SELECT *
    FROM V_DLMU_PartSupp2;
    
    INSERT
    INTO V_DLMU_PartSupp2
    VALUES(3,1,18,20);
    SELECT *
    FROM V_DLMU_PartSupp2;
    
    UPDATE V_DLMU_PartSupp2
    SET supplycost=18
    WHERE partkey=2;
    SELECT *
    FROM V_DLMU_PartSupp2;
    
    DELETE FROM V_DLMU_PartSupp2
    WHERE supplycost=20;
    SELECT *
    FROM V_DLMU_PartSupp2;
    4.创建一个上海黎顺服装经营部供应商供应的零件视图V_DLMU_PartSupp3,要求列出供应零件的编号、可用数量和供应价格等信息。然后通过该视图分别增加、删除和修改一条上海黎顺服装经营部零件供应记录,并比较题目3操作与本次异同。
    CREATE VIEW V_DLMU_PartSupp3
    AS
    SELECT partkey,suppkey,availqty,supplycost
    FROM partsupp
    WHERE suppkey=
                  (
                  SELECT suppkey
                  FROM supplier
                  WHERE name='上海黎顺服装经营部'
                  );          
    SELECT *
    FROM V_DLMU_PartSupp3;
    
    INSERT
    INTO V_DLMU_PartSupp3 
    VALUES(3,1,18,20);
    SELECT *
    FROM V_DLMU_PartSupp3 ;
    
    INSERT
    INTO V_DLMU_PartSupp3 
    VALUES(30007,4,18,20);
    SELECT *
    FROM partsupp
    WHERE partkey=30007;
    
    UPDATE V_DLMU_PartSupp3
    SET supplycost=30
    WHERE partkey=2;
    SELECT *
    FROM V_DLMU_PartSupp3;
    
    DELETE FROM V_DLMU_PartSupp3
    WHERE supplycost=20;
    SELECT *
    FROM V_DLMU_PartSupp3;
    
    5.验证题目2中定义的视图不可以更新
    INSERT
    INTO V_CustAvgOrder
    VALUES(100000,'liuhui',20,20000);
    6.创建顾客订单明细视图V_CustOrd,要求列出顾客编号、姓名、购买零件数量、金额,然后再该视图的基础上,再创建V_CustAvgOrder视图,然后使用RESTRICT选项删除视图V_CustOrd,观察现象并解释原因。使用CASCADE选项删除视图V_CustOrd,观察现象并检查V_CustAvgOrder是否存在并解释原因。
    
    CREATE VIEW V_CustOrd(custkey,name,quantity,extendedprice)
    AS
    SELECT customer.custkey,customer.name,quantity,extendedprice
    FROM customer,orders,lineitem
    WHERE customer.custkey=orders.custkey AND orders.orderkey=lineitem.orderkey; 
    SELECT *
    FROM V_CustOrd;
    
    CREATE VIEW V_CustAvgOrder(custkey,name,avgquantity,avgprice)
    AS
    SELECT custkey,name,AVG(quantity),AVG(extendedprice) 
    FROM V_CustOrd
    GROUP BY custkey,name;
    SELECT *
    FROM  V_CustAvgOrder;
    DROP VIEW V_CustOrd RESTRICT;
    
    DROP VIEW V_CustOrd ;
    

    五、参考结果

    1.创建该视图成功后查询结果

    2.创建该视图成功以及查询该视图的结果

     

    3.对视图V_DLMU_PartSupp2各项操作的结果

      3.1创建并查询该视图

      3.2执行插入操作并查询插入后的视图结果

      3.3执行修改操作并查询修改后的视图结果

      3.4执行删除操作并查询删除后的视图结果

    4.对视图V_DLMU_PartSupp3各项操作结果

      4.1建立成功后查询结果

      4.2进行插入操作并查新插入后的视图结果

     

      4.3进行修改操作并查询修改后的视图结果

      4.4进行删除操作并查询删除后的视图结果

    5.题目2中建立的视图更新操作结果

    6. RESTRICT和CASCADE删除

    六、注意

    1.实例2中创建的视图V_CustAvgOrder不可更新的原因:因为所创建的视图对其属性值进行了计算的其他形式上的改变,而对视图的更改最终表现为对表的更改而表中不存在视图的某一属性,或属性的性质不相同,则无法更改,这是一种视图机制。V_CustAvgOrder定义了平均购买金额和平均购买零件数量,但是原来的表项中并没有,对它们的更改无法对应到基本表上,所以该视图不可以更新。

    2. with check option  :在视图上的修改都要符合视图定义时的SELECT语句所指定的限制条件,这样可以确保数据修改后通过视图可以看到修改后的数据。

      3. RESTRICT删除和CASCAD删除:视图删除后视图的定义将从数据字典中删除,如果在该视图上还导出了其他视图,删除这些视图需要级联删除,遗憾的是,SQL Server2008并不支持级联删除,不过可以先删除视图 V_CustAvgOrder,然后再删除视图V_CustOrd。

     4. 视图的更新:一般行列子集视图是可以更新的,因为它只是去掉了基本表的某些行或者列,并且保留了主码,对视图的更新通过视图消解可以转化为对基本表的更新。

     

    展开全文
  • ` 实验 7 数据库的视图定义及维护实验 1. 实验目的 本实验的目的是使学生掌握视图的定义与维护操作 加深对视图在关系数据库中的 作用的理解 2. 实验时数 2 学时 [ 相关知识 ] 视图是根据子模式建立的虚拟表 一个视图...
  • 实验7 数据库的视图定义及维护实验 精品文档 精品文档 收集于网络如有侵权请联系管理员删除 收集于网络如有侵权请联系管理员删除 精品文档 收集于网络如有侵权请联系管理员删除 实验7 数据库的视图定义及维护实验 ...
  • MySQL--视图定义&操作

    千次阅读 2018-09-28 18:00:23
    视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 视图相对于普通的表的优势主要包括以下几项。 简单:使用视图的用户完全不需要关心后面对应的表的结构、...

    MySQL 从5.0.1 版本开始提供视图功能。

    定义

    视图(View)是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。

    视图相对于普通的表的优势主要包括以下几项。

    • 简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。
    • 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。
    • 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

    操作

    视图的操作包括创建或者修改视图、删除视图,以及查看视图定义。

    创建或者修改视图

    创建视图需要有CREATE VIEW 的权限,并且对于查询涉及的列有SELECT 权限。如果使用CREATE OR REPLACE 或者ALTER 修改视图,那么还需要该视图的DROP 权限。
    创建视图的语法为:

    CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

    修改视图的语法为:

    ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

    例如,要创建了视图staff_list_view,可以使用以下命令:

    CREATE OR REPLACE VIEW staff_list_view AS
    -> SELECT s.staff_id,s.first_name,s.last_name,a.address
    -> FROM staff AS s,address AS a
    -> where s.address_id = a.address_id ;

    MySQL 视图的定义有一些限制,例如,在FROM 关键字后面不能包含子查询,这和其他数据库是不同的,如果视图是从其他数据库迁移过来的,那么可能需要因此做一些改动,可以将子查询的内容先定义成一个视图,然后对该视图再创建视图就可以实现类似的功能了。

    视图的可更新性和视图中查询的定义有关系,以下类型的视图是不可更新的。

    • 包含以下关键字的SQL 语句:聚合函数(SUM、MIN、MAX、COUNT 等)、DISTINCT、GROUP BY、HAVING、UNION 或者UNION ALL。
    • 常量视图。
    • SELECT 中包含子查询。
    • JION。
    • FROM 一个不能更新的视图。
    • WHERE 字句的子查询引用了FROM 字句中的表。

    WITH [CASCADED | LOCAL] CHECK OPTION 决定了是否允许更新数据使记录不再满足视图的条件。这个选项与Oracle 数据库中的选项是类似的,其中:

    • LOCAL 是只要满足本视图的条件就可以更新;
    • CASCADED 则是必须满足所有针对该视图的所有视图的条件才可以更新。

    如果没有明确是LOCAL 还是CASCADED,则默认是CASCADED。

    删除视图

    用户可以一次删除一个或者多个视图,前提是必须有该视图的DROP 权限。

    DROP VIEW [IF EXISTS] view_name [, view_name] ...[RESTRICT | CASCADE]

    例如,删除staff_list 视图:

    drop view staff_list;

    查看视图

    从MySQL 5.1 版本开始,使用SHOW TABLES 命令的时候不仅显示表的名字,同时也会显示视图的名字,而不存在单独显示视图的SHOW VIEWS 命令。

    同样,在使用SHOW TABLE STATUS 命令的时候,不但可以显示表的信息,同时也可以显示视图的信息。所以,可以通过下面的命令显示视图的信息:

    SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']

    下面演示的是查看staff_list 视图信息的操作:

    show table status like 'staff_list' \G

     如果需要查询某个视图的定义,可以使用SHOW CREATE VIEW 命令进行查看。

    最后,通过查看系统表information_schema.views 也可以查看视图的相关信息。

    参考自:《深入浅出MySQL:数据库开发、优化与管理维护(第2版)》

    展开全文
  • 物化视图定义,创建,刷新,删除

    万次阅读 2018-01-03 13:09:03
     物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。 物化视图可以用于...

    一. 物化视图概述

    Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。

    物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。

    物化视图可以查询表,视图和其它的物化视图。

    通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。

    对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

    对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

    在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。

    物化视图由于是物理真实存在的,故可以创建索引。

    1.1 物化视图可以分为以下三种类型

    (1) 包含聚集的物化视图;

    (2) 只包含连接的物化视图;

    (3) 嵌套物化视图。

    三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。创建物化视图时可以指定多种选项,下面对几种主要的选择进行简单说明:

    1)创建方式(BuildMethods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。

    BUILD IMMEDIATE是在创建物化视图的时候就生成数据。

    BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE

    2)查询重写(QueryRewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。

    分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLEQUERY REWRITE

    3刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:ON DEMAND和ON COMMIT。

    ON DEMAND和ON COMMIT物化视图的区别在于其刷新方法的不同,ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新,即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。

    对基表,平常的COMMIT在0.01秒内可以完成,但在有了ON COMMIT视图后,居然要6秒。速度减低了很多倍。ON COMMIT视图对基表的影响可见一斑。

    1.2 物化视图,根据不同的着重点可以有不同的分类:

    1) 按刷新方式分:FAST/COMPLETE/FORCE

    2) 按刷新时间的不同:ON DEMAND/ON COMMIT

    3) 按是否可更新:UPDATABLE/READ ONLY

    4) 按是否支持查询重写:ENABLE QUERY REWRITE/DISABLEQUERY REWRITE

    默认情况下,如果没指定刷新方法和刷新模式,则Oracle默认为FORCE和DEMAND。

    注意:设置REFRESH ON COMMIT的物化视图不能访问远端对象。

    在建立物化视图的时候可以指定ORDER BY语句,使生成的数据按照一定的顺序进行保存。不过这个语句不会写入物化视图的定义中,而且对以后的刷新也无效。

    1.3 物化视图有三种刷新方式:COMPLETEFASTFORCE

    1) 完全刷新(COMPLETE)会删除表中所有的记录(如果是单表刷新,可能会采用TRUNCATE的方式),然后根据物化视图中查询语句的定义重新生成物化视图。

    2) 快速刷新(FAST)采用增量刷新的机制,只将自上次刷新以后对基表进行的所有操作刷新到物化视图中去。FAST必须创建基于主表的视图日志。

    对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。

    3) 采用FORCE方式,Oracle会自动判断是否满足快速刷新的条件,如果满足则进行快速刷新,否则进行完全刷新。

    Oracle物化视图的快速刷新机制是通过物化视图日志完成的。Oracle通过一个物化视图日志还可以支持多个物化视图的快速刷新。

    物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的。还可以选择是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。

    1.4 物化视图Refresh子句的其他说明与示例

    REFRESH 子句可以包含如下部分:

    [refresh [fast|complete|force]

    [on demand | commit]

    [start with date] [next date]

    [with {primary key|rowid}]]

    1.4.1 主键和ROWD子句:

    WITH PRIMARY KEY选项生成主键物化视图,也就是说物化视图是基于主表的主键,而不是ROWID(对应于ROWID子句). PRIMARY KEY是默认选项,为了生成PRIMARY KEY子句,应该在主表上定义主键,否则应该用基于ROWID的物化视图.

    基于ROWID物化视图只有一个单一的主表,不能包括下面任何一项:

    (1).Distinct 或者聚合函数.

    (2) .Group by,子查询,连接和SET操作

    --主键(PrimaryKey)物化视图示例:

    在远程数据库表emp上创建主键物化视图:

    [sql]  view plain copy
    1. CREATEMATERIALIZEDVIEW mv_emp_pk
    2. REFRESHFASTSTARTWITHSYSDATE
    3. NEXT SYSDATE + 1/48
    4. WITHPRIMARYKEY
    5. ASSELECT * FROM emp@remote_db
    [sql]  view plain  copy
    1. CREATEMATERIALIZEDVIEW mv_emp_pk  
    2. REFRESHFASTSTARTWITHSYSDATE  
    3. NEXT  SYSDATE + 1/48  
    4. WITHPRIMARYKEY  
    5. ASSELECT * FROM emp@remote_db  

    --当用FAST选项创建物化视图,必须创建基于主表的视图日志,如下:

    [sql]  view plain copy
    1. CREATEMATERIALIZEDVIEWLOGON emp;
    [sql]  view plain  copy
    1. CREATEMATERIALIZEDVIEWLOGON emp;  


    --Rowid物化视图示例:

    下面的语法在远程数据库表emp上创建Rowid物化视图

    [sql]  view plain copy
    1. CREATEMATERIALIZEDVIEW mv_emp_rowid
    2. REFRESHWITHROWID
    3. ASSELECT * FROM emp@remote_db;
    4. Materializedviewlog created.
    [sql]  view plain  copy
    1. CREATEMATERIALIZEDVIEW mv_emp_rowid  
    2. REFRESHWITHROWID  
    3. ASSELECT * FROM emp@remote_db;  
    4. Materializedviewlog created.  

    --子查询物化视图示例:

    在远程数据库表emp上创建基于emp和dept表的子查询物化视图

    [sql]  view plain copy
    1. CREATEMATERIALIZEDVIEW mv_empdept
    2. ASSELECT * FROM emp@remote_db e
    3. WHEREEXISTS
    4. (SELECT * FROM dept@remote_db d
    5. WHEREe.dept_no = d.dept_no)
    [sql]  view plain  copy
    1. CREATEMATERIALIZEDVIEW  mv_empdept  
    2. ASSELECT * FROM emp@remote_db e  
    3. WHEREEXISTS  
    4. (SELECT * FROM dept@remote_db d  
    5. WHEREe.dept_no = d.dept_no)  

    1.4.2 刷新时间

    START WITH子句通知数据库完成从主表到本地表第一次复制的时间,应该及时估计下一次运行的时间点, NEXT 子句说明了刷新的间隔时间.

    [sql]  view plain copy
    1. CREATEMATERIALIZEDVIEW mv_emp_pk
    2. REFRESHFAST
    3. STARTWITHSYSDATE
    4. NEXT SYSDATE + 2
    5. WITHPRIMARYKEY
    6. ASSELECT * FROM emp@remote_db;
    [sql]  view plain  copy
    1. CREATEMATERIALIZEDVIEW mv_emp_pk  
    2. REFRESHFAST  
    3. STARTWITHSYSDATE  
    4. NEXT  SYSDATE + 2  
    5. WITHPRIMARYKEY  
    6. ASSELECT * FROM emp@remote_db;  

    在上面的例子中,物化视图数据的第一个副本在创建时生成,以后每两天刷新一次.

    [sql]  view plain copy
    1. creatematerializedviewMV_LVY_LEVYDETAILDATA
    2. TABLESPACE ZGMV_DATA --保存表空间
    3. BUILDDEFERRED--延迟刷新不立即刷新
    4. refreshforce--如果可以快速刷新则进行快速刷新,否则完全刷新
    5. ondemand--按照指定方式刷新
    6. startwith to_date('24-11-200518:00:10''dd-mm-yyyyhh24:mi:ss'--第一次刷新时间
    7. nextTRUNC(SYSDATE+1)+18/24--刷新时间间隔
    8. as
    9. SELECT * FROM emp@remote_db;
    [sql]  view plain  copy
    1. creatematerializedviewMV_LVY_LEVYDETAILDATA  
    2. TABLESPACE ZGMV_DATA --保存表空间  
    3. BUILDDEFERRED--延迟刷新不立即刷新  
    4. refreshforce--如果可以快速刷新则进行快速刷新,否则完全刷新  
    5. ondemand--按照指定方式刷新  
    6. startwith to_date('24-11-200518:00:10''dd-mm-yyyyhh24:mi:ss'--第一次刷新时间  
    7. nextTRUNC(SYSDATE+1)+18/24--刷新时间间隔  
    8. as  
    9. SELECT * FROM emp@remote_db;  


    1.5 ON PREBUILD TABLE 说明

    在创建物化视图时指明ON PREBUILD TABLE语句,可以将物化视图建立在一个已经存在的表上。这种情况下,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。

    这种物化视图的查询重写要求参数QUERY_REWRITE_INTEGERITY必须设置为trusted或者stale_tolerated

    1.6 物化视图分区

    物化视图可以进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT)。具有这种特性的物化视图,当基表进行了分区维护操作后,仍然可以进行快速刷新操作。对于聚集物化视图,可以在GROUP BY列表中使用CUBE或ROLLUP,来建立不同等级的聚集物化视图。

    相关内容参考:

    Oracle 物化视图日志 与 快速刷新 说明

    http://blog.csdn.net/tianlesoftware/article/details/7720580

    Oracle 物化视图 详细错误描述 查看方法

    http://blog.csdn.net/tianlesoftware/article/details/7719789

    Oracle 物化视图 快速刷新 限制 说明

    http://blog.csdn.net/tianlesoftware/article/details/7719679

    二. 物化视图操作示例

    1. 创建物化视图需要的权限:

    [sql]  view plain copy
    1. GRANT CREATE MATERIALIZED VIEW TO USER_NAME;
    [sql]  view plain  copy
    1. GRANT CREATE MATERIALIZED VIEW TO USER_NAME;  


    2. 在源表建立物化视图日志

    [sql]  view plain copy
    1. CREATE MATERIALIZED VIEW LOG ON DAVE
    2. TABLESPACE&BISONCU_SPACE -- 日志空间
    3. WITH PRIMARY KEY-- 指定为主键类型
    [sql]  view plain  copy
    1. CREATE MATERIALIZED VIEW LOG ON DAVE  
    2. TABLESPACE&BISONCU_SPACE           -- 日志空间  
    3. WITH PRIMARY KEY;                   -- 指定为主键类型  

    3. 授权给中间用户

    [sql]  view plain copy
    1. GRANT SELECT ON DAVE TO ANQING;
    2. GRANT SELECT ON MLOG$_DAVE TO ANQING;
    [sql]  view plain  copy
    1. GRANT SELECT ON DAVE TO ANQING;  
    2. GRANT SELECT ON MLOG$_DAVE TO ANQING;  


    4. 在目标数据库上创建MATERIALIZED VIEW

    [sql]  view plain copy
    1. CREATE MATERIALIZED VIEW AICS_DAVE
    2. TABLESPACE&BISONCS_SPACE
    3. REFRESH FAST
    4. ON DEMAND
    5. --第一次刷新时间
    6. --START WITH to_date('2012-01-01 20:00:00', 'yyyy-mm-dd hh24:mi:ss')
    7. START WITH SYSDATE
    8. --刷新时间间隔。每1天刷新一次,时间为凌晨2点
    9. --NEXT TRUNC(SYSDATE,'dd')+1+2/24
    10. NEXT SYSDATE+1/24/20
    11. WITH PRIMARY KEY
    12. --USING DEFAULT LOCAL ROLLBACKSEGMENT
    13. DISABLE QUERY REWRITE AS
    14. SELECT MODEL_ID, STATUS,MODEL_NAME, MANU_ID, DESCRIPTION, CREATE_TIME, UPDATE_TIME, SW_VERSION
    15. FROM AICS_DAVE@LINK_DAVE;
    [sql]  view plain  copy
    1. CREATE MATERIALIZED VIEW AICS_DAVE  
    2. TABLESPACE&BISONCS_SPACE  
    3. REFRESH FAST  
    4.    ON DEMAND  
    5.    --第一次刷新时间  
    6.    --START WITH to_date('2012-01-01 20:00:00', 'yyyy-mm-dd hh24:mi:ss')  
    7.    START WITH SYSDATE  
    8.    --刷新时间间隔。每1天刷新一次,时间为凌晨2点  
    9.    --NEXT TRUNC(SYSDATE,'dd')+1+2/24  
    10.    NEXT SYSDATE+1/24/20  
    11. WITH PRIMARY KEY  
    12. --USING DEFAULT LOCAL ROLLBACKSEGMENT  
    13. DISABLE QUERY REWRITE AS  
    14. SELECT MODEL_ID, STATUS,MODEL_NAME, MANU_ID, DESCRIPTION, CREATE_TIME, UPDATE_TIME, SW_VERSION  
    15. FROM AICS_DAVE@LINK_DAVE;  

    5. 在目标物化视图上创建索引

    [sql]  view plain copy
    1. CREATE INDEX IDX_T_DV_CT
    2. ON AICS_DEV_INFO (CREATE_TIME, UPDATE_TIME)
    3. TABLESPACE &BISON_IDX;
    4. CREATE INDEX IDX_T_DV_UT
    5. ON AICS_DEV_INFO (UPDATE_TIME)
    6. TABLESPACE &BISON_IDX;
    7. CREATE INDEX I_T_DV_MSISDN
    8. ON AICS_DEV_INFO (MSISDN)
    9. TABLESPACE &BISON_IDX;
    [sql]  view plain  copy
    1. CREATE INDEX IDX_T_DV_CT  
    2.    ON AICS_DEV_INFO (CREATE_TIME, UPDATE_TIME)  
    3.    TABLESPACE &BISON_IDX;  
    4.    
    5. CREATE INDEX IDX_T_DV_UT  
    6.    ON AICS_DEV_INFO (UPDATE_TIME)  
    7.    TABLESPACE &BISON_IDX;  
    8.    
    9. CREATE INDEX I_T_DV_MSISDN  
    10.    ON AICS_DEV_INFO (MSISDN)  
    11.    TABLESPACE &BISON_IDX;  


    6. 物化视图刷新说明

    1)使用dbms_mview.refresh 手工刷新

    如:

    [sql]  view plain copy
    1. EXEC DBMS_MVIEW.REFRESH('MV_DAVE');
    2. --完全刷新
    3. EXEC DBMS_MVIEW.REFRESH(LIST => 'MV_DAVE',METHOD => 'c');
    4. EXEC DBMS_MVIEW.REFRESH('MV_DAVE','C');
    5. --快速刷新
    6. EXEC DBMS_MVIEW.REFRESH(LIST => 'MV_DAVE',METHOD => 'f');
    7. EXEC DBMS_MVIEW.REFRESH('MV_DAVE','F');
    [sql]  view plain  copy
    1. EXEC DBMS_MVIEW.REFRESH('MV_DAVE');  
    2.    
    3. --完全刷新  
    4. EXEC DBMS_MVIEW.REFRESH(LIST => 'MV_DAVE',METHOD => 'c');  
    5. EXEC DBMS_MVIEW.REFRESH('MV_DAVE','C');  
    6.    
    7. --快速刷新  
    8. EXEC DBMS_MVIEW.REFRESH(LIST => 'MV_DAVE',METHOD => 'f');  
    9. EXEC DBMS_MVIEW.REFRESH('MV_DAVE','F');  


    2)使用dbms_refresh.refresh 过程来批量刷新MV

    如果我们在创建物化视图的过程指定start 和next time的刷新时间,那么Oracle 会自动创建刷新的job,并采用dbms_refresh.refresh 的方式。

    使用这种方式刷新之前需要先make refresh group,然后才可以刷新。

    Refreshmake 的语法可以参考:

    http://docs.oracle.com/cd/B19306_01/server.102/b14227/rarrefreshpac.htm#i94057

    示例:

    假设存在物化视图MV_T1, MV_T2, MV_T3. 创建refresh group的语法如下:

    [sql]  view plain copy
    1. SQL> EXEC DBMS_REFRESH.MAKE('REP_TEST''MV_T1,MV_T2,MV_T3', SYSDATE, 'SYSDATE+ 1')
    2. --刷新整个refresh group 组:
    3. SQL> EXEC DBMS_REFRESH.REFRESH('REP_TEST')
    [sql]  view plain  copy
    1. SQL> EXEC DBMS_REFRESH.MAKE('REP_TEST''MV_T1,MV_T2,MV_T3', SYSDATE, 'SYSDATE+ 1')  
    2.    
    3. --刷新整个refresh group 组:  
    4. SQL> EXEC DBMS_REFRESH.REFRESH('REP_TEST')  

    7. 删除物化视图及日志

    [sql]  view plain copy
    1. --删除物化视图日志:
    2. DROP MATERIALIZED VIEW LOG ON DAVE;
    3. --删除物化视图
    4. DROP MATERIALIZED VIEW MV_DAVE;
    [sql]  view plain  copy
    1. --删除物化视图日志:  
    2. DROP MATERIALIZED VIEW LOG ON DAVE;  
    3. --删除物化视图  
    4. DROP MATERIALIZED VIEW MV_DAVE;  

    8. 查看物化视图刷新状态信息

    [sql]  view plain copy
    1. SQL> SELECT MVIEW_NAME, LAST_REFRESH_DATE, STALENESS FROMUSER_MVIEWS;
    2. SQL> SELECT NAME, LAST_REFRESH FROM USER_MVIEW_REFRESH_TIMES;
    [sql]  view plain  copy
    1. SQL> SELECT MVIEW_NAME, LAST_REFRESH_DATE, STALENESS FROMUSER_MVIEWS;  
    2. SQL> SELECT NAME, LAST_REFRESH FROM USER_MVIEW_REFRESH_TIMES;  

    9. 查询物化视图日志:

    [sql]  view plain copy
    1. SELECT * FROM MLOG$_DAVE;
    展开全文
  • SQL server视图定义和操作

    千次阅读 2020-09-03 11:48:51
    视图定义和操作 一、实验目的 通过创建视图,对视图的操作,对视图的操作加深对视图概念的理解 二、实验内容 1、创建视图、修改视图删除视图、使用视图 2、熟练掌握对视图的操作 三、实验要求 在本题下面提交...
  • 视图

    2020-12-14 16:18:46
    视图的概念: 从一个或几个基本表(或视图)导出的关系变量,视图的值是定义表达式计算后所得到的结果 虚表,只存放视图定义,不存放视图对应的数据 基本表发生变化后,对应视图也就随之改变 ...视图删除 DROP VI
  • “任何不是逻辑模型的一部分但作为虚关系而对用户可见的关系...我们在sql中用create view命令定义视图。create view命令格式为: create view v as,其中可以是任何有效的查询表达式,v表示视图名称。例如,有这样一
  • 视图定义与操作

    千次阅读 2019-07-25 10:11:49
    实验名称 视图定义与操作 实验地点 实验楼502 实验日期 一、实验目的及要求 1. 掌握创建视图的 SQL 语句的用法 2. 掌握修改视图的方法 3. 熟悉视图更新与基本表更新的区别与联系 4....
  • sql server中删除视图

    千次阅读 2019-09-27 13:29:31
    sql server中删除视图 1. 删除视图 drop view is_s1; 2. 级联删除视图 drop view is_s1 cascade;
  • 删除视图

    千次阅读 2016-06-14 13:23:56
    删除视图
  • 实验三(1)视图定义及使用实验 一、实验目的 使学生掌握 SQL Server中的视图创建及删除的方法,加深对视图和SQL Server图表作用的理解。 本实验需要1学时。 二、实验内容 1. 启动数据库服务软件SQL Server 2000的...
  • MySQL 删除视图

    千次阅读 2020-03-14 09:20:38
    删除视图时,只能删除视图定义,不会删除数据。 基本语法 可以使用 DROP VIEW 语句来删除视图。 语法格式如下: DROP VIEW <视图名1> [ , <视图名2> …] 其中:<视图名> 指定要删除视图名。...
  • 视图定义与使用

    千次阅读 2016-06-05 15:34:59
    视图是从一个或多个基本表中到处的虚表,数据库只存放视图的定义,我们通过视图所看到的数据其实仍然存放在基本表中。...定义视图定义视图的语句格式为: create view <视图名>[(<列名>[<列名>]…)] as
  • SQL数据定义、更新,视图

    千次阅读 2019-11-18 12:17:02
    文章目录1 数据定义语言1.1 数据库的定义1.2 基本表的定义1.2.1 创建基本表1.2.2 基本表的修改1.2.3 基本表的删除2 SQL更新语言2.1 插入数据2.2 删除数据2.3 修改数据3 视图3.1 定义视图3.2 查询视图3.3 视图更新3.4...
  • (1)视图概述 ...视图的结构和内容是通过SQL查询获得的,它也称为视图名,可以永久地保存在数据库中,视图在数据库内存储的是select语句,也即数据库内并没有存储视图这个表,而存储的是视图定义。Sele...
  • 也就是,可永久隐藏视图定义的文本。 注意此操作不可逆。加密视图后,无法再修改它,因为无法再看到视图定义。如果需要修改加密视图,则必须删除它并重新创建另一个视图。 示例代码: create view userFt...
  • 对视图进行INSERT操作必须要满足以下两个条件: ①该视图必须是行列子集视图 ②所有非空且无默认值的列都必须出现在...②视图定义中既有WHERE又有CHECK OPTION时,若新记录,则执行INSERT时报错,如果没有CHECK OPTI...
  • 本实验的目的是使学生掌握视图定义与查询与更新维护操作,加深对视图在关系数据库中的作用的理解。 2.实验时数 2学时 [相关知识] 视图是根据子模式建立的虚拟表。一个视图可以由一个表构造,也可以由多个表构造...
  • SQL Server实验——数据库视图定义与使用学生选课数据库的创建创建学生信息表student创建课程信息表course创建学生选课信息表sc插入相关信息视图的创建基本应用一、创建信息系(sdept=’IS’)学生信息的视图IS_...
  • PostgreSQL数据库中最有用的功能之一就是创建自定义“视图”,这些视图仅仅是预先定义的SQL查询,它们存储在数据库中并可以在需要时重复使用。因此,以这种方式储存经常使用的SQL查询比每次都手工输入要更有效率而且...
  • 视图定义和管理创建视图删除视图查看视图定义修改视图定义1. 创建视图创建视图需要具有create view的权限同时应该具有查询涉及列的select权限语法格式create [algorithm = {undefined | merge | temptable}]view ...
  • 2、删除视图 二、查询视图 三、更新视图 四、视图的作用 一、定义视图 1、建立视图 语法:CREATE VIEW 视图名 【列名】... AS 子查询 【WITH CHECK OPTION】 WITH CHECK OPTION:加上这个语句后即对视图的...
  • MySQL中视图定义、原理和如何使用、创建

    万次阅读 多人点赞 2016-05-26 09:56:24
    林炳文Evankaka原创作品。转载请注明出处...  摘要:本文主要讲了  林炳文Evankaka原创作品。...  摘要:本文主要讲了MySQL中视图定义、原理和如何使用、创建、删除等 一. 视图概述
  • (2)百度说:删除基表时,由该基表导出的所有视图定义都必须显式删除 但是我直接删掉ib_user这张表没有报错,视图也没有被删掉 ![图片说明](https://img-ask.csdn.net/upload/201909/05/1567663661_287465.png) ...
  • MySQL删除视图

    万次阅读 2017-07-30 23:14:46
    删除视图时,只能删除视图定义,不会删除数据 删除一个或多个视图,使用DROP VIEW语句语法格式 DROP VIEW [IF EXISTS] View_name [,view_name1]…… [RESTRICT | CASCADE]参数说明View_name,表示要删除视图...
  • 视图—VIEW(1)定义视图① 建立视图删除视图(2)查询视图(3)更新视图① 更新数据—UPDATE SET② 插入数据—INSERT INTO③ 删除数据—DELETE④ 更新视图的限制 0.前言 数据库是SQL Sever 数据库管理系统是...
  • SQLServer之删除视图

    千次阅读 2018-10-30 11:25:29
    删除视图时,将从系统目录中删除视图定义和有关视图的其他信息。 还将删除视图的所有权限。 使用 DROP TABLE 删除的表上的任何视图都必须使用 DROP VIEW 显式删除。 对索引视图执行 DROP VIEW 时,将自动删除...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 250,885
精华内容 100,354
关键字:

视图定义者删除