视图的定义和使用(在scott/tiger中完成)

本文介绍了SQL视图的概念,包括视图的创建、使用以及更新的限制。视图是基于SQL查询的虚拟表,可以简化复杂查询。创建视图时,可以使用WITH CHECK OPTION限定仅允许特定更改,或WITH READ ONLY使其变为只读。虽然简单视图可更新,但通常不建议直接修改视图,以避免影响源表数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 什么是视图?
  2. 视图怎么创建?
  3. 视图创建了之后可以更改嘛?
  4. 视图更改有三种情况:

  1. 不加限定:复杂的查询不可以更改,简单的视图对于创建条件是可以更改的
  2. WITH CHECK OPTION限定:只能改创建条件
  3. WITH READ ONLY限定:不能更改

视图定义:包装了复杂查询的SQL语句对象。
视图使用:CREATE VIEW[OR REPLACE] AS ()

第一步:创建视图
CREATE VIEW myview AS (
    SELECT e.ename,d.dname,temp.count,s.grade
    FROM emp e,dept d,(SELECT deptno,COUNT(empno) count FROM emp
    GROUP BY deptno) temp,salgrade s
    WHERE e.job=‘CLERK’
    AND d.deptno=e.deptno
    AND temp.deptno=d.deptno
    AND e.sal BETWEEN s.losal AND s.hisal );
    
注意:若出现如下情况,原因是因为版本问题导致权限不足导致的
权限不足
解决办法:输入如下命令即可
conn sys/change_on_install as sysdba;
grant create view to scott;
conn scott/tiger;

第二步:查看视图
select * from myview;

视图可以修改嘛?
对视图进行更新
答案是否定的~ 严格来讲,视图的确是不可以修改的,因为视图保存的不是真实数据而是只是查询结果的数据,并且在以上的复杂查询里面这样的操作更是不能修改。

替换数据 [OR REPLACE] 表示视图不存在就创建新的视图,若存在就用新的子查询去代替就得视图

CREATE OR REPLACE VIEW myview
     AS
SELECT * FROM emp WHERE deptno=20;

update myview set deptno=40 where empno=7369;

在这里插入图片描述
视图条件简单,可以更新,但是视图更新会影响原表也更新,所以最好不要对视图进行更新。
CREATE OR REPLACE VIEW myview
     AS
SELECT * FROM emp WHERE deptno=20
WITH CHECK OPTION;

注意:若更新的是条件字段,则不可以改动,但是如果改的不是创建条件,也同样可以更新。

所以定义只读视图:WITH READ ONLY;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值