数据库视图的使用

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

通常视图的数据源有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]

转载于:https://www.cnblogs.com/sun-chao/p/9593142.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值