• 数据库视图的使用


    视图,有关视图的官方解释是,它是一个基于一个表或多个表的逻辑表,视图本身不包含任何数据,恩,简单说就是一张虚拟的表,是一个查询语句的结果,但是它的数据是从表获取的,这些表成为源表或基表。当基表的数据发生变化时,视图里的数据同样发生变化。

    通常视图的数据源有3种:1.单一表的子集 2.多表操作结果集 3.视图的子集

    视图的三个作用: 1.简化数据   2.使数据更加独立 3.增加安全性

    视图的基本语法:

    CREATE  [ OR REPLACE ] [ [NO] FORCE ] ] VIEW

      [Schema.] VIEW

    [ (alias,…) inline_constraint(s) ]

       [out_of_line_constraint(s)]

    AS SQLQUERY

    [ WITH { READ ONLY | CHECK OPTION [CONSTRAINT constraint] } ];

    语法解释说明:

    OR REPLACE :表示新建视图可以覆盖原同名视图

    [NO]FORCE :表示是否强制创建视图

    Schema.view : 视图所属方案名称和视图本身的名称

    Alias,… inline_constraint(s) : 视图字段别名和内联约束

    Out_of_line_constraint(s) : 是与inline_constraint(s) 相反的约束声明

    With read only : 只读视图,提高安全性

    With check option [constraint constraint] : 对视图增加或修改数据时必须满足子查询的条件,相当于把子查询作为约束条件。(where 条件也作为约束条件)

    例子:(单表视图)

    CREATE OR REPLACEVIEW VIEW_TEST

    AS

      SELECT ORG_NUM,CUST_ID,ACCT_NUM,ACCT_NAME

        FROM DEPOSIT_INFO

       WHERE CUST_ID LIKE '1%'

    WITH READ ONLY

    注:多表视图相比于单表视图只是SQLQUERY部分是多个表关联出的数据,基于视图的视图则是由另一个视图而来,这里可以将视图看成表

    带有约束的视图

    CREATE OR REPLACE VIEW VIEW_TEST_QUE

    (

    ORG_NUM,

    CUST_ID, --这个作为主键约束

    ACCT_NUM,

    ACCT_NAMECONSTRAINT ACCT_NAME_UNQ UNIQUE RELY DISABLE NOVALIDATE,--唯一约束

    CONSTRAINT PK_CUST_ID PRIMARY KEY (CUST_ID) RELY DISABLE NOVALIDATE --建立主键约束

    )

    AS

      SELECT ORG_NUM,CUST_ID,ACCT_NUM,ACCT_NAME

        FROM DEPOSIT_INFO

       WHERE CUST_ID LIKE '1%'

    WITH CHECK OPTION;

     

      如果想要一个可以更新(这里的更新是指增加删除,修改)的视图,源表应尽量是单表,否则限制比较多,

     如下情况出现在视图中,视图就不允许更新

    1. DISTINCT关键字
    2. 集合运算或分组函数,如INTERSECT,SUM,MAX,COUNT等函数。
    3. 出现GROUP BY,ORDER BY,MODEL,START WITH等语句
    4. 出现伪列关键字,如ROWNUM

    除了上述之外,还需要考虑基表的一些约束,这些约束对视图数据的更新都有一定影响,如果需要创建可以更新的视图,可以使用INSTEAD OF 触发器

    视图约束的修改:

    基本语法结构

     ALTER  VIEW  [schema.]VIEW

    Add [CONSTRAINTconstraint_name]

    { UNIQUE (column [,column] …)

     | PRIMARY KEY (column [ ,column ]…)

     | FOREIGN KEY (colum [,column ]…)

         Reference_clause

     | CHECK (condition)

    }

    [constraint_state]

    说明:

    1. add [CONSTRAINT constraint_name ] 为视图增加一项约束,可以带约束名称
    2. unique 唯一约束 primary key 主键约束 foreign key 外键约束 check 检查约束
    3. constraint_state约束声明

    例子: 增加

       ALTER VIEW VIEW_TEST_QUE

       ADD CONSTRAINT ACCT_NAME_UNQ UNIQUE (ACCT_NAME)

       DISABLE NOVALIDATE;

    例子:删除视图约束

        Alter view [schema.] view drop CONSTRAINTconstraint_name;

    视图的删除:

        DROP view [schema.] view [cascade CONSTRAINTS]

  • 相关阅读:
    《Android深入透析》之广播(Broadcast)
    曾经的程序员-《30岁的程序员,你迷惘了吗?》
    30岁的程序员,你迷惘了吗?
    Android: 详解触摸事件如何传递
    关于HTML5服务器发送事件(SSE)
    Android: 在onCreate()中获得对象尺寸
    jxl教程图文详解
    相当牛X的java版星际游戏
    程序员的无奈(十二):终于获得了投资
    图览各编程语言中敲击最多的键
  • 原文地址:https://www.cnblogs.com/sun-chao/p/9593142.html
Copyright © 2020-2023  润新知