Oracle(11g)数据库教程之十二:Oracle视图

x33g5p2x  于2021-12-24 转载在 其他  
字(1.7k)|赞(0)|评价(0)|浏览(485)

Oracle(11g)数据库教程之十二:Oracle视图

准备工作:

先启动Oracle,并打开前期建立的数据库和表

查看每个表的结构:

问:什么是视图?视图是干什么用的?

答:视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。

问:为什么要使用视图?

答:使用视图的大部分情况是为了保障数据安全性,提高查询效率。

一、创建视图

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

VIEW view_name [(column_list)]

AS select_statement

[WITH [CASCADED | LOCAL] CHECK OPTION]

1)OR REPLACE:表示替换已有视图

2)ALGORITHM:表示视图选择算法,默认算法是UNDEFINED(未定义的):MySQL自动选择要使用的算法 ;merge合并;temptable临时表

3)select_statement:表示select语句

4)[WITH [CASCADED | LOCAL] CHECK OPTION]:表示视图在更新时保证在视图的权限范围之内

cascade是默认值,表示更新视图的时候,要满足视图和表的相关条件

local表示更新视图的时候,要满足该视图定义的一个条件即可

TIPS:推荐使用WHIT [CASCADED|LOCAL] CHECK OPTION选项,可以保证数据的安全性 

基本格式:

create view <视图名称>[(column_list)]

     as select语句

     with check option;

1、在单表上创建视图

查看视图结构

查询结果

2、在多表上创建视图:建立一个视图,包括:学号,姓名,所学课程及成绩

查询视图记录

视图将我们不需要的数据过滤掉,将相关的列名用我们自定义的列名替换。

二、查看视图

1、使用设计视图可查看视图信息

2、视图一旦创建完毕,就可以像一个普通表那样使用,视图主要用来查询

三、视图的更改

1、CREATE OR REPLACE VIEW语句修改视图

基本格式:

create or replace view view_name as select语句;

在视图存在的情况下可对视图进行修改,视图不在的情况下可创建视图

查询结果:

2、DML操作更新视图

因为视图本身没有数据,因此对视图进行的dml操作最终都体现在基表中

例1:在v_stu把“王林”改成“王小林”,观察在基表student的变化

查询基表student的变化

例2、在视图v_stu中插入一条数据:然后查看基表的变化

学号:192025101   姓名:张三   专业:物联网工程

查询基表数据:

3、在视图v_stu 中把上一题插入数据删除,然后查看基表数据:

当然,视图的DML操作,不是所有的视图都可以做DML操作。

有下列内容之一,视图不能做DML操作:

①select子句中包含distinct

②select子句中包含组函数

③select语句中包含group by子句

④select语句中包含order by子句

⑤select语句中包含union 、union all等集合运算符

⑥where子句中包含相关子查询

⑦from子句中包含多个表

⑧如果视图中有计算列,则不能更新

⑨如果基表中有某个具有非空约束的列未出现在视图定义中,则不能做insert操作

4、drop删除视图

删除视图是指删除数据库中已存在的视图,删除视图时,只能删除视图的定义,不会删除数据,也就是说不动基表:

DROP VIEW [IF EXISTS]  

view_name [, view_name] ...

如果视图不存在,则抛出异常;

再次删除v_stu。因不存在抛出错误。

四、检查视图:使用WITH CHECK OPTION约束 

对于可以执行DML操作的视图,定义时可以带上WITH CHECK OPTION约束

作用:

对视图所做的DML操作的结果,不能违反视图的WHERE条件的限制。

示例:创建视图,包含1990年之前出生的所有学生

查询视图结果:

此时,使用update对视图进行修改:

因为违反了视图中的where birthday < '1990-01-01'子句,所以抛出异常;

利用with check option约束限制,保证更新视图是在该视图的权限范围之内。

相关文章