视图
视图是基于一张或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都是来源某些表,这些表被称为基表。通过视图来查看表,就像从不同角度来观察一个或多个表
视图的一些有点:
-
可以提高数据的访问安全性,通过视图往往只可以访问数据库中表的特定部分,限制了用户访问表的全部行和列。
-
简化了对数据的查询,隐藏了查询的复杂性。视图的数据来自一个复杂的查询。用户对视图的检索却很简单。
-
视图是相同数据的不同表示,通过为不同的用户创建一个表的不同视图,使用户可分别访问同一个表的不同部分。
-
视图的创建
创建视图需要create view系统权限,视图的创建语法如下:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 视图名[(列别名1[,列别名2..])]
as 子查询
[WITH CHECK OPTION [CONSTRAINT 约束名]]
[WITH READ ONLY]OR REPLACE 表示替代已经存在的视图
force 表示不管基表是否存在,创建视图
noforce 表示只有基表存在时,才创建视图,是默认值。
with check option 更新或者插入数据时满足where条件。
with read only 只读 不能插入数据
--eg 给列取别名,后面的子查询不能用*对应。
create or replace force view v_emp (a,b,c)
as
select empname,deptno ,sal from emp where deptno='20'
with check option
with read only;来自基表的限制
除了以上的限制,基表本身的限制和约束也要考虑。如果生成子查询的语句是一个分组查询,或查询中出现计算列,这时显然不能对表进行插入。另外,主键和not null列如果没有出现在视图的子查询中,也不能对视图进行插入(插入的数据存入基表时,这些值默认空违反基表约束)。在视图中插入的数据必须满足基表的约束条件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!