Oracle视图

一:视图简介

视图存在于oracle数据字典中,不占用空间
视图可以增删改查以及复杂查询(修改有一点的局限性)

安全性: 视图可以隐藏一些数据
易用性:可使复杂的查询易于理解和使用
同步性: 基础表同步到视图,视图同步到基本表

1.1视图优点

1.1.1 视点集中
用户只能查看视图指定的数据列,保证数据安全性

1.1.2简化操作
视图可以隐藏表与表之间的复杂关联操作

1.1.3定制数据
让不同用户看到不同数据

1.1.4合并分割数据
对于水平/垂直切分的表,在视图上可以保持原来的结构关系

1.1.5逻辑数据独立性
如果应用建立在数据表上,当数据库表发生变化的时候,可以在表上建立视图,通过视图屏蔽表的变化,从而使应用程序可以不动
如果应用建立在数据表上,当视图发生变化的时候,可以在表上建立视图,通过视图屏蔽应用的变化,从而使数据库表可以不动
如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而使应用程序可以不动
如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而使数据库表可以不动

1.1.6安全性
通过视图可以限制用户在数据的不同子集上
使用权限可被限制在基表的行的子集上
使用权限可被限制在基表的列的子集上
使用权限可被限制在基表的行和列的子集上
使用权限可被限制在多个基表的连接所限定的行上
使用权限可被限制在基表中的数据的统计汇总上
使用权限可被限制在另一个视图的一个子集上,或是一些视图和基表合并后的子集上

1.2使用视图注意事项

视图只是具有名称的已保存查询.基于视图创建视图最终将导致性能问题
每个视图可以造成自己对数据更新的限制,由于视图可能基于视图而创建,所以结果可能不允许用户更新数据
如果使用不当,视图可能也允许用户添加或删除不属于视图范围内的记录,这样会造成数据完整性和安全性问题

二:创建视图

CREATE [OR REPLACE] [FORCE/NOFORCE] VIEW 视图名称 [(列1,列2…)]
AS <QUERY_EXPRESSION>
[WITH CHECK OPTION [CONSTRAINT 约束名称]]
[WITH READ ONLY [CONSTRAINT 约束名称]];

解释:
[OR REPLACE] : 释放替换,最好保留,避免视图已存在而报错
[FORCE/NOFORCE] : 指定是否允许创建视图的查询语句存在语法错误
<QUERY_EXPRESSION>
[WITH CHECK OPTION [CONSTRAINT 约束名称]] : 确保执行的DML语句不会引起数据不出现在视图上 , 可以更新和插入数据,前提是必须满足创建视图时候的where子句的条件
[WITH READ ONLY [CONSTRAINT 约束名称]]; : 指定为只读视图,不允许插入和更新

2.1单表视图

create or replace view tmp_view as select * from tree where pid = 666;
注意:如果出错就加上force,允许query语句出错
例如: create or replace force view tmp_view as select * from tree where pid = 666;

2.2多表视图

只是在query语句上进行多表联查

2.3可更新视图: 由select语句决定

2.3.1 视图定义必须是一个简单的select语句,不能带连接,集合操作,即select语句的from子句中不能出现多个表,也不能有join,except,union,intersect
2.3.2 视图定义的select的子句中不能有distinct
2.3.3 select子句中各列必须来自基表(视图)列,不能是表达式
2.3.4 视图所基于的表(视图)必须是可更新的
2.3.5 视图定义的select子句的子查询的from子句不能有视图所基于的表(视图)
2.3.6 视图定义的select语句中不能含有group by子句
2.3.7 视图定义的select语句中不能含有having子句

2.4内联视图(inline view)

临时
一次性
结构不存储
理解为: from后面的子查询就是内联视图

2.5嵌套视图

在视图的基础上创建视图

三:使用视图

3.1插入数据

前提:可更新视图
insert into tmp_view values(…)

3.2修改数据

update tmp_view set … where …
注意: 这里列名使用视图的列名,而不是基表的列名

3.3删除数据

delete from tmp_view where …

3.4删除视图

drop view tmp_view

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值