Oracle:视图
一:简介
oracle视图可以理解为数据库中一张虚拟的表,他是通过一张或者多张基表进行关联查询后组成一个虚拟的逻辑表。
查询视图,本质上是对表进行关联查询。
视图的本身是不包含任何数据,只是一个查询结果,当基表的数据发生变化时,视图里面的数据也会跟着发生变化。
我们经常在实际开发过程中遇到的视图可以大概分为三种:单表视图、多表关联视图、视图中含有子视图。
二:优势
1、使数据简单化:可以将复杂的查询创建成视图,提供给他人使用,他人就不需要去理解其中复杂性的业务关系或逻辑关系。
这样对视图的使用人员来说,就简化了数据的,屏蔽了数据的复杂性。
2、表结构设计的补充:系统刚刚开始设计时,大部分程序是直接访问表结构的数据的,但是随着业务的变化、系统的更新等,
造成了某些表结构的不适用,这时候去修改表结构对系统的影响太大,开发成本较高,这个时候可以创建视图来对表结构的设 计进行补充,降低开发成本。程序可以直接通过查询视图得到想要的数据。
3、增加安全性:视图可以把表中指定的字段展示给用户,而不必把表中所有字段一起展示给用户。
在实际开发中,视图经常作为数据的提供方式,设置为只读权限提供给第三方人员进行查询使用。
三:创建视图
1、创建视图的语法结构如下:
1 | CREATE [OR REPLACE] VIEW view_nameASSELECT查询[WITH READ ONLY CONSTRAINT] |
2、参数解释:
(1)OR REPLACE:如果视图已经存在,则替换旧视图。
(2)WITH READ ONLY:默认不填的,用户是可以通过视图对基表执行增删改操作,
但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行 insert 操作,或者基表设置了某些约束,这时候插入视图或者修改视图的值,有可能会报错)。
WITH READ ONLY 说明视图是只读视图,不能通过该视图进行增删改操作。但是在现实开发中,基本上不通过视图对表中的 数据进行增删改操作。
3、案例:利用学生信息表(stuinfo)、班级表(class)关联创建视图,
只提供一些学生基本信息和班级信息(剔除学生一些敏感信息:如身份证,家庭地址等)。
代码
(1)如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | create view vw_stuinfo as select a.stuid,--学号 a.stuname,--学生姓名 a.grade,--年级 a.sex,--性别( 1 :男、 2 :女) a.age,--年龄 b.classname,--班级 b.monitorname,--班长 b.headmastername--班主任 from stuinfo a, class b where a.classno = b.classno; select * from vw_stuinfo; |
代码(2)如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | create or replace view vw_stuinfo as select a.stuid,--学号 a.stuname,--学生姓名 a.grade,--年级 a.sex,--性别( 1 :男、 2 :女) a.age,--年龄 b.classname,--班级 b.monitorname,--班长 b.headmastername--班主任 from stuinfo a, class b where a.classno = b.classno with read only; select * from vw_stuinfo; |
四:删除视图
1、删除视图的语法结构如下:
DROP VIEW schema_name.view_name [CASCADE CONSTRAINT];
2、参数解释:
(1)schema_name :指定包含视图的模式的名称。如果跳过模式名称,则Oracle假定该视图位于当前用户模式中。
(2)view_name :指定要删除的视图的名称。如果一个视图被其他视图,物化视图或同义词所引用,Oracle将把这些对象标记为INVALID,但不会将其移除。
(3)CASCADE CONSTRAINT :如果视图有任何约束,则必须指定CASCADE CONSTRAINT子句以删除引用视图中的主键和唯一键的所有参照完整性约束。如果不这样做,存在这样的约束时,DROP VIEW语句将会失败。
3、示例
1 2 | --删除视图 DROP VIEW vw_stuinfo; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!