视图,有关视图的官方解释是,它是一个基于一个表或多个表的逻辑表,视图自己不包含任何数据,恩,简单说就是一张虚拟的表,是一个查询语句的结果,可是它的数据是从表获取的,这些表成为源表或基表。当基表的数据发生变化时,视图里的数据一样发生变化。安全
一般视图的数据源有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;
若是想要一个能够更新(这里的更新是指增长删除,修改)的视图,源表应尽可能是单表,不然限制比较多,
以下状况出如今视图中,视图就不容许更新
除了上述以外,还须要考虑基表的一些约束,这些约束对视图数据的更新都有必定影响,若是须要建立能够更新的视图,可使用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]
说明:
例子: 增长
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]