Oracle数据库(九)——视图

视图——数据库中虚拟的表

什么是视图

视图是一个基于一个表或多个表的逻辑表,视图本身不包含任何数据。当基表中的数据发生变化时,视图里的数据同样发生变化。通常视图的数据源有:单一表的子集,多表操作结果集,视图的子集

视图的作用:使数据简化,使数据更加独立,增加安全性

视图的语法

CREATE [ OR REPLACE ] [[ NO ] FORCE ] VIEW --FROCE 强制创建视图
    [ schema. ]view
    [(alias,...) inline_constraint(s)] --别名和内联约束
        [out_of_line_constraint(s)]
AS subquery
[
    WITH { READ ONLY | CHECK OPTION [ CONSTRAINT constraint ]} --read only只读视图 
  --CHECK OPTION [ CONSTRAINT constraint ] 一旦使用,当对视图增加或者修改数据时必须满足子查询的条件。
];

创建视图

--单表视图
CREATE OR REPLACE VIEW SIMPLE_PRODUCTINFO_VIEW
AS
    SELECT PRODUCTID,PRODUCTNAME,PRODUCTPRICE,CATEGORY,ORIGIN
    FROM PRODUCTINFO
    WHERE ORIGIN = 'CHINA'
    AND ROWNUM < 6;
--多表视图
CREATE OR REPLACE VIEW MULTI_PRODUCTINFO_VIEW 
AS 
    SELECT PT.PRODUCTID,PT.PRODUCTNAME,PT.PRODUCTPRICE,PT.CATEGORY,CG.CATEGROYNAME,PT.ORIGIN
    FROM PRODUCTINFO PT,CATEGROYINFO CG
    WHERE PT.CATEGORY = CG.CATEGROYID
    AND PT.ORIGIN = '中国'
    AND ROWNUM < 10;
--视图中的视图
CREATE OR REPLACE VIEW VI_PRODUCTINFO_VIEW
AS
    SELECT PRODUCTID,PRODUCTNAME,PRODUCTPRICE,CATEGROYNAME,ORIGIN
    FROM MULTI_PRODUCTINFO_VIEW;
--没有源表的视图
CREATE OR REPLACE FORCE VIEW NOTABLE_PRODUCTINFO_VIEW 
AS
    SELECT PRODUCTID,PRODUCTNAME,PRODUCTPRICE,CATEGROYNAME,ORIGIN
    FROM NOTABLE

创建带约束的视图

CREATE OR REPLACE VIEW CONST_PRODUCTINFO_VIEW
(
  PRODUCTID,
  PRODUCTNAME CONSTRAINT PRODUCTNAME_UNQ UNIQUE RELY DISABLE NOVALIDATE, --使用inline方式对productname创建UNIQUE约束
  PRODUCTPRICE,
  QUANTITY,
  CATEGORY,
  ORIGIN,
  CONSTRAINT VI_PRODUCTID_PRK PRIMARY KEY (PRODUCTID) RELY DISABLE NOVALIDATE --用out_of_line方式对视图设置主键约束
  --RELY DISABLE NOVALIDATE 表示约束对此前此后的数据都不进行检查,并告知Oracle此视图现在符合这两种约束
)
AS
    SELECT PRODUCTID,PRODUCTNAME,PRODUCTPRICE,QUANTITY,CATEGORY,ORIGIN
    FROM PRODUCTINFO
    WHERE ORIGIN = 'CHINA'
    WITH CHECK OPTION;

对操作视图数据的限制

视图允许我们进行DML操作,但视图的增加和更新实际上是在源表中进行的,所以我们可以对视图进行设置更新限制条件。

视图的只读属性:在最后加上WITH READ ONLY

视图的检查约束: WITH CHECK OPTION

该选项表示视图启动了和子查询条件一样的约束,也就是说,如果对视图修改或插入的数据和查询条件不一致,那么该操作就会被终止。

如果你想要一个可以更新的视图,源表尽量是单表,否则限制比较多,下面的情况一旦出现在视图中,视图就不允许更新

  • DISTINCT关键字
  • 集合运算或分组函数,如INTERSECT,SUM,MAX,COUNT
  • 出现GROUP BY,ORDER BY,MODEL,START WITH等语句
  • 出现伪列关键字,如ROWNUM

对视图约束的修改

ALTER VIEW [schema.] view
ADD [CONSTRAINT constraint_name] 
{UNIQUE (column [,column ]...)
| PRIMARY KEY (column [,column ]...)
| FOREIGN KEY (column [,column ]...)
    references_clause
| CHECK (condition) 
}
[constraint_state]  --约束声明

--增加约束
ALTER VIEW SIMPLE_PRODUCTINFO_VIEW
ADD CONSTRAINT PUTPRIC_UNQ UNIQUE (PRODUCTPRICE)
DISABLE NOVALIDATE;
--查看约束
SELECT CONSTRAINT_NAME,TABLE_NAME,R_OWNER,R_CONSTRAINT_NAME
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'SIMPLE_PRODUCTINFO_VIEW';
--删除约束
ALTER VIEW SIMPE_PRODUCTINFO_VIEW
DORP CONSTRAINT PUTPRIC_UNQ;

删除视图

DROP VIEW [.shcema.] view [CASCADE CONSTRAINTS] --删除视图时删除约束
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值