数据库视图的使用

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

一般视图的数据源有3种:1.单一表的子集 2.多表操做结果集 3.视图的子集函数

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

 

视图的基本语法:it

CREATE  [ OR REPLACE ] [ [NO] FORCE ] ] VIEWio

  [Schema.] VIEW语法

[ (alias,…) inline_constraint(s) ]im

   [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]

相关文章
相关标签/搜索