什么是视图?作用是什么?

您所在的位置:网站首页 仰视图是什么 什么是视图?作用是什么?

什么是视图?作用是什么?

2024-03-21 20:42| 来源: 网络整理| 查看: 265

1.1. 视图 1.1.1. 什么是视图 视图(VIEW)也被称作虚表,即虚拟的表,是一组数据的逻辑表示,其本质是对应于一条SELECT语句,结果集被赋予一个名字,即视图名字。 视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。

创建视图的语法: 01.CREATE [OR REPLACE] VIEW view_name[(alias[, alias…])] 02.AS subquery ; 视图创建后,可以像操作表一样操作视图,主要是查询操作。 语法中的Subquery是SELECT查询语句,对应的表被称作基表。 根据视图所对应的子查询种类分为几种类型: •SELECT语句是基于单表建立的,且不包含任何函数运算、表达式或分组函数,叫做简单视图,此时视图是基表的子集; •SELECT语句同样是基于单表,但包含了单行函数、表达式、分组函数或GROUP BY子句,叫做复杂视图; •SELECT语句是基于多个表的,叫做连接视图。 1.1.2. 视图的作用 如果需要经常执行某项复杂查询,可以基于这个复杂查询建立视图,此后查询此视图即可,简化复杂查询; 视图本质上就是一条SELECT语句,所以当访问视图时,只能访问到所对应的SELECT语句中涉及到的列,对基表中的其它列起到安全和保密的作用,可以限制数据访问。 1.1.3. 授权创建视图 创建视图的DDL语句是CREATE VIEW,用户必须有CREATE VIEW系统权限,才能创建视图。如果没有权限,创建视图时会提示:权限不足。 管理员可以通过DCL语句授予用户创建视图的权限。下例中管理员给用户tarena创建视图的权限: 01.GRANT CREATE VIEW TO tarena; 1.1.4. 创建简单视图(单表) 创建一个简单视图V_EMP_10,来显示部门10中的员工的编码、姓名和薪水: 01.CREATE VIEW v_emp_10 02.AS 03.SELECT empno, ename, sal, deptno 04.FROM emp 05.WHERE deptno = 10; 查看视图结构: 01.DESC v_emp_10;

1.1.5. 查询视图 查询视图和查询表的操作相同: 01.SELECT * FROM v_emp_10; 此时视图的列名,和创建视图时的列名一致,不一定是原列名: 01.SELECT id, name, salary FROM v_emp_10; 1.1.6. 对视图进行INSERT操作 视图本身并不包含数据,只是基表数据的逻辑映射。所以当对视图执行DML操作时,实际上是对基表的DML操作。对视图执行DML操作的基本原则: •简单视图能够执行DML操作,下列情况除外:在基表中定义了非空列,但简单视图对应的SELECT语句并没有包含这个非空列,导致这个非空列对视图不可见,这时无法对视图执行INSERT操作; •如果视图定义中包含了函数、表达式、分组语句、DISTINCT关键字或ROWNUM伪列,不允许执行DML操作; •DML操作不能违反基表的约束条件。 对简单视图执行INSERT操作,成功插入数据到基表中: 01.INSERT INTO v_emp_10 02.VALUES(1234, ‘DOCTOR’, 4000, 10); 简单视图可以通过DML操作影响到基表数据。 1.1.7. 创建具有CHECK OPTION约束的视图 语法如下: 01.CREATE [OR REPLACE] VIEW view_name[(alias[, alias…])] 02.AS subquery 03.[WITH CHECK OPTION]; 其中:WITH CHECK OPTION短语表示,通过视图所做的修改,必须在视图的可见范围内: •假设INSERT,新增的记录在视图仍可查看 •假设UPDATE,修改后的结果必须能通过视图查看到 •假设DELETE,只能删除现有视图里能查到的记录 创建带有CHECK OPTION约束的视图: 01.CREATE OR REPLACE VIEW v_emp_10 02.AS 03.SELECT empno id, ename name, sal salary, deptno 04.FROM emp 05.WHERE deptno = 10 06.WITH CHECK OPTION; 下述DML语句操作失败,因为部门20不在视图可见范围内: 01.INSERT INTO v_emp_10 VALUES(1008,‘donna’,5500, 20); 02.UPDATE v_emp_10 SET deptno = 20 WHERE id = 7782;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3