Oracle基操笔记(七):视图

目录

 

一、概述

二、创建视图(DDL)

三、修改&删除

四、限制视图的数据操作

五、相关问题


一、概述

        视图 (VIEW) 与表的行为相似,但它是“虚表”。可使用DQL查询或DML操作记录,视图可以让用户的操作更方便,且极大保障数据库安全。视图是虚拟表,是从多个表中导出来的,它还可以从已经存在的视图的基础上定义。

        视图一经定义便存储在数据库中,通过视图看到的本质还是原表中的数据。对视图的操作(查询、修改和删除)会影响相应的基本表。同样地,原表更改,视图也会有变化。

        

二、创建视图(DDL)

        视图包含SELECT查询出的结果,因此视图的创建基于SELECT语句和已存在的数据表,它可以建立在一张或多张 table 上。

公式:

  CREATE [OR REPLACE] [[NO] FORCE] VIEW
[Schema.] view_name
[(Alias, ...)inline_constraint(s)] 
       [out_of_line_constraint(s)]
      AS SubQuery
  [
    WITH {Read Only Check Opinion[Constraint constraint_name]}
  ]; 

[ [NO] Force ]:表示是否强制创建视图。

[ Schema. ]:视图所属模式的名称,schema是数据对象的集合,包括像表、视图、索引、同义词等等都可以说是schema的对象。

[(Alias, ...)inline_constraint(s)]:表示视图字段的别名和内联的名称。

[out_of_line_constraint(s)]:表约束,与上面的inline相反。

Constraint:约束。

SubQuery:子查询。

With Read Only:只读。

With Check Opinion:一旦使用该限制,当对视图修改/增加 数据时,必须满足子查询的条件。

假设有两张表:tb_student 和 tb_stuinfo

CREATE TABLE tb_student
(
    s_id number(12),    --学号
    name varchar2(40)   --姓名
);

CREATE TABLE tb_stuinfo
(
    s_id number(12),    --学号
    class varchar2(40), --班级
    addr vaarchar2(100) --住址
);

创建一个视图多表查询它的学号,姓名,班级

CREATE VIEW V_CLASS (id, name, class) 
    AS 
SELECT STU.s_id, STU.name, INFO.class
  FROM tb_student STU, tb_stuinfo INFO
 WHERE STU.s_id=INFO.s_id;

创建视图的视图

不过是在子查询语句中将 From tb_name 换成 From view_name。

三、修改&删除

可用CREATE OR REPLACE 或 ALTER 语句

添加唯一约束

  ALTER VIEW V_class
    ADD CONSTRAINT T_UNQ UNIQUE (ID)
DISABLE NOVALIDATE;

上面实例为字段ID 添加了唯一约束,约束名为T_UNQ

DISABLE NOVALIDATE表示此前 和 此后数据都不检查

删除视图用DROP

DROP VIEW view_name;

更新视图中的数据 

创建视图,供应商号为105,且水果价格大于5元,并且给 'Melon' 涨价10元

--创建视图,供应商号为105,且水果价格大于5元
CREATE OR REPLACE VIEW view_iop
    AS SELECT s.s_id,f.f_name, f.f_price 
  FROM suppliers s, fruits f 
 WHERE s.s_id=f.s_id AND s.s_id=105 AND f.f_price>5; 

SELECT * FROM view_iop;

--给‘Melon’涨价10元
UPDATE view_iop 
   SET f_price=f_price+10 
 WHERE f_name='melon'; 

若操作成功,原表中的数据也将被更改。

四、限制视图的数据操作

设为只读属性,防止用户修改数据

CREATE OR REPLACE VIEW view_tt
    AS SELECT col1, col2 
  FROM tb_name
  WITH READ ONLY; 

创建完成后,若向视图插入、更新、删除数据时,会报错。

设置视图的检查属性

创建一个视图,限制条件为字段 price 的值大于10

CREATE OR REPLACE VIEW view_prc
    AS SELECT col1, col2
  FROM tb_name
 WHERE price>10
  WITH CHECK OPINION; 

创建完成后,向视图 view_prc 插入、更新、删除数据时,会受到检查条件的限制。

五、相关问题

        什么时候视图无法进行更新操作?

  1. 视图中不包含基本表中被定义为非空的列【全为空】
  2. 在定义视图时SELECT语句后的字段列表中使用数学表达式
  3. 在定义视图时SELECT语句后的字段列表中使用聚合函数【AVG, COUNT, SUM...】
  4. 在定义视图时SELECT语句中使用DISTINCT, UNION, TOP, GROUP BY, HAVING语句

猜你喜欢

转载自blog.csdn.net/adidas74891496/article/details/86519610