视图 view

视图是数据库的对象之一。 视图也叫做虚表,既虚拟表,本质是对应一条select 语句,

select语句的结果集赋予一个名字就是视图的名字。

作用:

  1.可以简化复杂的查询

  2.可以限制数据的访问,对基表的其他数据起到安全和保密的作用。

创建一个 表        create table emp(

empno number(6), name char(10), id number(4), deptno number(10), job varchar2(10) );

*创建视图:create view emp_v as
     ;创建视图时,create对应的表叫做基表。* 查询视图  select *from emp_v ;  根据查询所的方式可分为三种视图:  1.简单视图:根据单表建立的,且不包含任何函数运算,表达式和分组,既单表的子集。  2.复杂视图:根据单表建立,包含有单行函数/表达式/分组的视图。  3.连接视图:基于多表建立的视图。*删除视图  drop view emp_v;

*简单视图可以进行DML操作,但是复杂视图不允许DML操作。

修改视图:视图的结构取决于对应的子查询,所以修改视图即替换对应
的子查询。REPLACE
CREATE OR REPLACE VIEW V_EMP_J
AS
SELECT EMPNO,ENAME,SAL
FROM EMP_XIAOJIE;
SELECT * FROM V_EMP_J;

对视图的不当DML操作会污染基表数据:
对简单视图进行DML操作后,视图对基表做对应的操作,但是影响的数据对应视图来说
是不可见的,就是对基表数据的污染。

为了避免视图对基表产生数据的污染。我们可以对视图添加检查选项要求(检查约束)
使其对视图进行DML时操作时检查视图时操作后是否对操作的数据可见,如果不可见
则不允许操作。

*简单视图可以进行DML操作,但是复杂视图不允许DML操作。
视图本身是不包含数据的,只是基表的逻辑映射,所以
对视图执行DML操作时,实际上操作的是基表。

对视图进行DML操作,实际上是对基表进行DML操作,
如果不去约束,我们对视图不可视进行DML操作会对
基表的数据产生污染。

对视图进行DML操作基本原则:
*简单视图可以进行DML操作,但是有以下情况除外,
基表中定义了非空列,但是简单视图对应的 SELECT
语句没有包含这个非空列,导致非空列对于视图不可视,
这时无法对视图进行 INSERT 操作。
*复杂视图不允许DML操作
*DML操作不能违反基表的约束条件。

创建具有 CHECK OPTION 的约束视图。
CREATE OR REPLACE VIEW V_EMP_J
AS
SELECT EMPNO,ENAME,SAL
FROM EMP_XIAOJIE
WHERE SAL<3000
WITH CHECK OPTION; --添加约束后无法对基表进行数据污染。
SELECT * FROM V_EMP_J;

创建具有 READ ONLY 约束的视图。
对简单进行DML操作是合法的但是不安全,如果没有在视图进行DML
操作的必要的话,要在建立视图时声明只读来避免这种情况,包含
基表数据不会被非法的修改。
无法对只读视图执行DML操作。
CREATE OR REPLACE VIEW V_EMP_J
AS
SELECT EMPNO,ENAME,SAL
FROM EMP_XIAOJIE
WHERE SAL<3000
WITH READ ONLY;--用来只读

数据字典:
数据字典是一系列的表,这些表的数据由数据库自行维护,记录清单清单信息。
1.在数据字典 user_objects 中查询所有视图:
SELECT object_name FROM user_objects
where object_type='VIEW';--查找所有视图
view:视图 table:表 sequence:序列 index:索引
2.在数据字典 USER_VIEWS 查询所有的指定视图:

3.在数据字典 user_updatable_columns 中查询视图:
SELECT COLUMN_NAME,INSERTABLE,UPDATABLE,DELETABLE --看操作权限
FROM USER_UPDATABLE_COLUMNS
WHERE TABLE_NAME='V_EMP_J';


最新文章

  1. Linux 信号详解四(pause,alarm)
  2. Saving changes is not permitted in SQL Server
  3. 【第二课】深入理解Handler
  4. 5个SQL核心
  5. Part 82 to 85 Talking about Generic queue, stack collection class
  6. 监控Activity在前后台状态的切换
  7. python----iter\next
  8. C++ 一些容易忽略的基本点
  9. 自上而下,逐步揭开PHP解析大整数的面纱
  10. Windows笔记目录
  11. 阿里云部署Node.js项目(CentOS)
  12. [Flask]学习杂记一 Hello程序
  13. react,react native,webpack,ES6,node.js----------今天上午学了一下node.js
  14. IT人如何打造个性化的个人网站(在线简历)
  15. day_4_25 py
  16. WebForm(Application,ViewState,Repeater的Command操作)
  17. Java语法糖之内部类
  18. mysql 选择优化的数据类型
  19. array_udiff、array_udiff_assoc、array_udiff_uassoc 使用方法
  20. 《DSP using MATLAB》示例 Example 6.14、6.15

热门文章

  1. css文字实例锦集
  2. ShowDialog()之后,主窗体失去焦点
  3. python假设一段楼梯共 n(n&gt;1)个台阶,小朋友一步最多能上 3 个台阶,那么小朋友上这段楼 梯一共有多少种方法
  4. DevOps 教程
  5. 搭建selenium+Python+eclipse 的开发环境
  6. mybaits-plus总结
  7. 19 02 21 selenium get_attribute的几种用法
  8. javascript 创建私有变的三个方法
  9. 三十二、SAP中定义选择屏幕
  10. 033-PHP取1-100的随机数