您可以执行创建视图、替换视图、更改视图和删除视图等任务。

  • 关于视图

视图的形式类似于普通表,我们可以从视图中查询数据,实际上它是建立在表上的一种虚表,从本质上说,视图是对存储的查询。

  • 创建视图和连接视图

可以使用CREATE VIEW语句创建视图。每个视图可以由引用表、物化视图或其他视图的查询来定义。还可以创建连接视图,即在FROM子句中指定多个基表或视图。

  • 替换视图

可以通过删除并重新创建视图,或者通过执行带有OR REPLACE子句的CREATE VIEW语句实现替换现有视图的定义。

  • 在查询中使用视图

可以像查询表一样查询视图,您还可以在视图上执行数据操作语句(DML)相关的操作,但有一些限制。

  • 修改视图

使用ALTER VIEW语句只能显式地重新编译无效的视图。

  • 删除视图

您可以使用DROP VIEW语句删除视图。

父主题: 管理视图、序列和同义词

15.1.1. 关于视图

视图的形式类似于普通表,我们可以从视图中查询数据,实际上它是建立在表上的一种虚表,从本质上说,视图是对存储的查询。

视图从它所基于的表中获取数据,这些表称为基表。基表可以是实际的表,也可以是其他视图。在视图上执行的所有操作实际上都会影响视图的基表。可以像使用表一样使用视图。您可以对视图进行查询、更新、插入和删除,就像对表进行查询一样。

对视图的访问会转化成对其基表的访问,并且将所查询的结果以视图所规定的格式和顺序返回。因此当基表中的数据发生变化时,从视图中查询出的数据也随之改变了。

对用户而言通常要进行查询操作,甚至是复杂且频繁的查询,那么就可以为这个查询定义一个视图。假设用户经常执行下面的查询语句:

SELECT student_id, student_name
FROM student
WHERE age > 20 and gender = '男';

如果已经为该查询定义了一个名为student_age_view的视图,那么您就可以执行一条简单的语句获取您想要的结果。

SELECT * FROM student_age_view;

另外值得注意的是视图本身不保存对基表的查询结果,仅仅保存一条SELECT语句。从上面这个例子可以看出使用视图的目的是为了方便用户访问基表数据。实际上视图的另一个重要作用是确保用户对基表的安全访问。对于同一个表,不同的用户而言,我们可以定义不同规则的视图,从而保证用户只能进行允许的操作。

父主题: 管理视图

15.1.2. 创建视图和连接视图

可以使用CREATE VIEW语句创建视图。每个视图可以由引用表、物化视图或其他视图的查询来定义。还可以创建连接视图,即在FROM子句中指定多个基表或视图。

  • 创建视图

可以使用CREATE VIEW语句创建视图。

  • 创建连接视图

您还可以在CREATE VIEW语句的FROM子句中指定多个基表或视图进行视图创建。

  • 创建FORCE视图

如果CREATE VIEW语句带有FORCE关键字,意味着无论视图的依赖检查是否成功,只要语句没有语法错误,数据库也会创建该视图。

父主题: 管理视图

15.1.2.1. 创建视图

可以使用CREATE VIEW语句创建视图。

创建视图需要满足以下要求:

  • 1.要在模式中创建视图,必须具有CREATE VIEW权限。如果要在其他用户的模式中创建视图,必须具有CREATE ANY VIEW系统权限。您可以显式地或通过角色获得这些特权。

  • 2.视图的所有者(无论是您还是其他用户)必须被授予访问视图定义中引用的所有对象的权限。所有者不能通过角色获得这些特权。另外,视图的功能依赖于视图所有者的权限。例如,如果视图的所有者只有test表的INSERT权限,那么视图只能用于向test表插入新行,而不能用于SELECT、UPDATE或DELETE行。

  • 3.如果视图的所有者打算将视图的访问权限授予其他用户,则该所有者必须通过GRANT OPTION获得基本对象的对象权限,或者通过ADMIN OPTION获得系统权限。

每个视图可以由引用表、物化视图或其他视图的查询定义。与所有子查询一样,定义视图的查询不能包含FOR UPDATE子句。为了说明视图,定义一张实验表,模拟学校的学生信息:

CREATE TABLE student (student_id NUMBER(4),student_name CHAR(8) NOT NULL,gender VARCHAR2(2),age NUMBER(2),grade VARCHAR2(8) NOT NULL,classid NUMBER(2),email VARCHAR2(20),sdate DATE,CONSTRAINT pk_nmb PRIMARY KEY,CONSTRAINT ck_check CHECK (gender in ('男','女')),CONSTRAINT ck_age CHECK (age BETWEEN 16 AND 30),CONSTRAINT uq_email UNIQUE (email)
);

下面的语句在student表中的数据子集上创建一个视图:

CREATE VIEW student_age_view AS
SELECT student_id, student_name
FROM student
WHERE age > 20 and gender = '男'
WITH LOCAL CHECK OPTION;

上述例子创建了student_age_view视图,用于查询年龄大于20且性别为男的学生ID和姓名信息。LOCAL CHECK OPTION子句是可选的,可以用来限定DML操作,并且只对当前视图的WHERE条件。值得注意的是,针对该视图如果想执行INSERT和UPDATE语句,应确保新增加的数据可以被该视图查询到。例如,下面的INSERT语句根据student_age_view视图成功地将一行性别为男,年龄21(大于20)的学生数据插入到student表中:

INSERT INTO student_age_view VALUES (1726,'王猛','男',21,'高中一年级',2,'101@qq.com',SYSDATE);

但是,下面的INSERT语句将会返回一个错误,因为它试图插入一个性别为女,年龄为19的女学生信息,这是因为student_age_view视图的查询只引用性别为男且年龄大于20的行:

INSERT INTO student_age_view VALUES (1726,'王萌','女',19,'高中一年级',3,'102@qq.com',SYSDATE);

另请参阅:

SQL语言中关于CREATE VIEW语句详细的描述

父主题: 创建视图和连接视图

15.1.2.2. 创建连接视图

您还可以在CREATE VIEW语句的FROM子句中指定多个基表或视图进行视图创建。这些基于多个表创建的视图就被称为连接视图,主要目的在于简化连接查询。

为了清楚的说明连接视图,下列是本章节视图中使用到的user和practice_detail两个表的详细定义:

CREATE TABLE user (id int NOT NULL,device_id int NOT NULL,gender varchar(14) NOT NULL,age int ,university varchar(32) NOT NULL,gpa float,active_days_within_30 int ,question_cnt int ,answer_cnt int
);CREATE TABLE question_detail (id int NOT NULL,device_id int NOT NULL,question_id int NOT NULL,result varchar(32) NOT NULL
);

下面的创建视图语句创建了连接user和practice_detail表数据的avg_answer_view视图:

CREATE VIEW avg_answer_view AS
SELECT user.university,COUNT(question_id)/COUNT(distinct question_detail.device_id) AS avg_answer_cnt
FROM question_detail INNER JOIN user
ON user.device_id = question_detail.device_id
GROUP BY university;

上述视图例子根据user和practice_detail两表获取了指定的计算结果,但值得一提的是由于该视图中使用了GROUP BY子句和DISTINCT关键字,因此将不能通过该视图avg_answer_view进行DML相关操作。本节后面的内容将详细指出该限制条件。

父主题: 创建视图和连接视图

15.1.2.3. 创建FORCE视图

如果CREATE VIEW语句带有FORCE关键字,意味着无论视图的依赖检查是否成功,只要语句没有语法错误,数据库也会创建该视图。如果依赖检查成功则为有效视图,否则创建出来的就是无效视图。

比如视图引用了一个不存在的表或现有表中的无效列,或者视图所有者没有所需的权限时,数据库依然能创建该视图并将其输入到数据字典中。只是该视图还不能使用,当引用的表恢复(或者创建)后,该视图将能恢复使用。

要创建FORCE视图,CREATE VIEW语句必须包含FORCE关键字,具体的命令如下:

CREATE FORCE VIEW AS ...;

父主题: 创建视图和连接视图

15.1.3. 替换视图

可以通过删除并重新创建视图,或者通过执行带有OR REPLACE子句的CREATE VIEW语句实现替换现有视图的定义。

要替换视图,您必须拥有删除和创建视图所需的所有权限。如果视图的SELECT定义必须修改,可以优先考虑使用带有OR REPLACE子句的CREATE VIEW语句执行视图替换,其他拥有关系、权限和非SELECT规则在内的视图属性不会被更改;视图不能使用ALTER VIEW语句更改SELECT定义。

替换视图的方式具体如下:

  • 1.您可以直接删除并重新创建视图。

注意

当一个视图被删除时,所有相应的对象权限将从角色和用户中被撤销。在重新创建视图之后,必须重新授权。

  • 2.可以使用包含OR REPLACE子句的CREATE VIEW语句重新定义视图。OR REPLACE子句会替换当前定义的视图,并保留当前授权。

例如,在前面小节所示创建的student_age_view视图,如果需要重新定义视图WHERE子句指定的年龄和性别以及新增查询结果。可以使用以下语句替换student_age_view视图为当前定义:

CREATE OR REPLACE VIEW student_age_view ASSELECT student_id, student_name, ageFROM studentWHERE age > 19 and gender = '女'WITH LOCAL CHECK OPTION;

在替换视图之前,请注意到可能出现的影响:

  • 替换一个视图将替换数据字典中的视图定义。视图引用的所有基础对象都不受影响。

  • 如果CHECK OPTION中不再指定LOCAL关键字,则将会根据当前新视图和所有基视图条件检查新数据。

父主题: 管理视图

15.1.4. 在查询中使用视图

可以像表一样查询视图,您还可以在视图上执行数据操作语句(DML)相关的操作,但有一些限制。

要对视图执行查询或INSERT、UPDATE或DELETE语句,必须显式地或通过角色分别为视图拥有SELECT、READ、INSERT、UPDATE或DELETE对象权限。

类似于普通的表,可以以相同的方式进行查询。例如,要查询重新定以后的student_age_view视图(大于19岁的女生),输入引用该视图的SELECT语句,获取结果如下:

SELECT * FROM student_age_view;student_id   student_name     age
---------------------------------
7844          宋义             20
7782          梅田田           21
7672          张华乐           20
7781          吉祥             21
7742          张丽莉           20
7900          黄金美           21
7654          倪文             20
7694          向玲             20
7698          向柯             20

可以使用视图向基表中插入、更新或从基表中删除行,但存在一些限制。下面的语句使用student_age_view视图向student表插入一个新行:

INSERT INTO student_age_viewVALUES (7950, '王雯雯','女',20,'高中一年级',3,'104@qq.com',SYSDATE);

上述数据之所以能被成功插入到基表,是因为该行数据能被视图重新选中查询到,即满足(只允许将年龄大于19且为女性),同时不存在以下限制:

  • 如果视图是包含了DISTINCT操作符、GROUP BY子句、HAVING、LIMIT或OFFSET的查询定义,则不能使用该视图向基表插入、更新或从基表删除行。

  • 如果视图是用WITH CHECK OPTION定义的,则查询必须满足一定条件,如果视图不能从基表中选择行,则不能使用视图向基表插入或更新行。

  • 如果不包含DEFAULT子句的NOT NULL列在视图中的新数据不满足该约束,则不能使用视图将行插入到基表中。

  • 视图的选择列不能包含任何聚合、窗口函数或者集合返回函数。

父主题: 管理视图

15.1.5. 修改视图

使用ALTER VIEW语句只能显式地重新编译无效的视图。

ALTER VIEW语句允许您在运行前定位重新编译错误。要确保更改不会影响视图或依赖于它的其他对象,可以在更改视图的一个基表之后显式地重新编译视图。要使用ALTER VIEW语句,视图必须在您的模式中,或者您必须具有ALTER ANY TABLE系统权限。

父主题: 管理视图

15.1.6. 删除视图

您可以使用DROP VIEW语句删除视图。

可以删除模式中包含的任何视图。要删除另一个用户模式中的视图,必须具有DROP ANY VIEW系统权限。 例如,下面的语句删除了student_age_view视图:

DROP VIEW student_age_view;

父主题: 管理视图

金仓数据库KingbaseES数据库管理员指南--15.1. 管理视图相关推荐

  1. DTC精彩回顾—金学东:从可迁到好迁:人大金仓打造国产数据库生态 助力企业国产化转型...

    2021 DTC 2021数据技术嘉年华(2021 DTC) 将于12月23-24日在北京丽都皇冠假日酒店 盛大开启! (图为部分出席嘉宾) 快来报名大会与数据行业专家 一起探讨行业最前沿热点话题叭! ...

  2. ZooKeeper管理员指南 部署和管理指南

    ZooKeeper管理员指南 部署和管理指南 PDF 部署 系统要求 支持的平台 必备软件 群集(多服务器)安装程序 单服务器和开发人员设置 管理 设计ZooKeeper部署 跨机器要求 单机要求 供 ...

  3. 金仓数据库KingbaseES数据库开发指南(2. 开发基础)

    目录 2.1. 设计基础 ¶ 2.1.1. 数据库部署模式 ¶ 2.1.2. 数据库环境规划 ¶ 2.1.3. 可扩展性设计 ¶ 2.1.4. 安全设计 ¶ 2.1.5. 可移植性设计 ¶ 2.1.6 ...

  4. 金仓数据库KingbaseES数据库开发指南(4. 面向应用程序的PL/SQL开发)

    目录 4.1. PL/SQL子程序和包的编写 ¶ 4.1.1. PL/SQL 子程序概述 ¶ 4.1.2. PL/SQL 包概述 ¶ 4.1.3. PL/SQL 单元概述 ¶ 4.1.4. 创建 PL ...

  5. 金仓数据库KingbaseES数据库参考手册(静态数据词典视图2.2. 系统视图 )

    目录 2.2.1. sys_available_extensions ¶ 2.2.2. sys_available_extension_versions ¶ 2.2.3. sys_config ¶ 2 ...

  6. 金仓数据库KingbaseES数据库中存储过程和函数的区别

    关键字:存储过程 函数 KingbaseES数据库中存储过程和函数的区别如下表所示: 存储过程 函数 1 用于在数据库中完成特定的操作或者任务(如插入.删除等)  用于特定的数据(如选择) 2 程序头 ...

  7. 金仓数据库KingbaseES数据库概念(四)--事务

    目录 1. 事务的概念 2. 事务的特性 3. 数据库对事务的管理 4. 并发控制 4.1. 事务隔离 4.2. 显式锁定 同大多数的商业数据库一样,KingbaseES数据库也引入了事务的概念.本章 ...

  8. 炫“库”行动-人大金仓有奖征文-数据库的备份及恢复

    计算机系统在运行过程中可能会发生内部故障.系统故障.硬件故障等问题.这些问题可能会造成系统崩溃,数据库运行事务非正常中断,部分数据丢失等一系列严重后果.因此,对生产数据库.容灾数据库.测试数据库等重要 ...

  9. 人大金仓多节点数据库集群配置参数一键修改

    对于单个数据库来讲,修改配置参数相对比较容易: 对于多节点的主备集群环境的来讲,集群配置参数修改并不是简单的数据主备同步过程,而是需要对每个节点的配置文件进行调整. 金仓KingbaseES数据库集群 ...

  10. 炫“酷”行动-人大金仓有奖征文--金仓分析型数据库迁移IBM Netezza一体机技术可行性

    https://bss.csdn.net/m/topic/kingbase 本文正在参与"炫库"行动--人大金仓有奖征文 一. 数据类型兼容性 通常异构数据库移植的工作量繁重.这些 ...

最新文章

  1. 扩增子分析解读1质控,实验设计,双端序列合并
  2. matlab蚁群算法 路径规划,基于蚁群算法的机器人路径规划MATLAB源码
  3. 三句话回答C/C++面试题
  4. wpf首次项目开发技术总结wpf页面
  5. 【opencv学习】【图像的阈值处理】
  6. 蔚来汽车澄清“4年亏损57亿美元”说法:只有200亿人民币
  7. L1-022. 奇偶分家-PAT团体程序设计天梯赛GPLT
  8. tensorflow之softmax
  9. win10连接mysql服务器频繁断线_MySQL连接数过多导致服务无法正常运行
  10. kubernetes Containerd shim docker关系
  11. 快速突破面试算法之栈与队列结构篇
  12. 算法竞赛入门经典(第二版) 答案汇总(持续更新)
  13. 三步激活win10(转)
  14. MoneyBookers Manul doc
  15. Python爬虫之正则表达式
  16. 深度调查:危险的“360安全卫士”!
  17. 第一讲:计算机基本结构
  18. SNS2124(OEM博科FC交换机)忘记密码,密码初始化
  19. 剪辑视频,在视频背景上随机添加图片
  20. 【Word】docx转doc后公式转换为图片不清晰/模糊

热门文章

  1. Computer Shader的理解记录
  2. 阿里巴巴编码规范认证考试总结
  3. 好玩的WPF第一弹:窗口抖动+边框阴影效果+倒计时显示文字
  4. AirServer7电脑桌面版一款便捷式手机电脑投屏软件
  5. 刽子手游戏 C语言实现
  6. vuex技术多组件共享数据-vuex模块化+namespace
  7. android商品详情详解
  8. 计组_指令周期/机器周期(cpu周期)/时钟周期(节拍T) 主频超频/cpu频率发热
  9. Win10 搭建自带的ftp站点
  10. 几个不常见但非常出色的 .NET 开源库