- 什么是视图?
- 视图怎么创建?
- 视图创建了之后可以更改嘛?
- 视图更改有三种情况:
- 不加限定:复杂的查询不可以更改,简单的视图对于创建条件是可以更改的
- WITH CHECK OPTION限定:只能改创建条件
- 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;