一、目标
学会创建视图,使用视图
明白键保留表的含义和使用方式
二、视图(来自于基本表,在基本表上层的一种虚拟表)
-
视图以经过定制的方式显示来自一个或多个表的数据
-
视图可以视为“虚拟表”或“存储的查询”
-
创建视图所依据的表称为“基表”
-
视图的优点有:
提供了另外一种级别的表安全性
隐藏了数据的复杂性
简化了用户的SQL命令
隔离基表结构的改变
通过重命名列,从另一个角度提供数据
-
视图里面不存放数据,只是对表的一种定义
-
物化视图与普通视图不一样,它是存在数据的
语法:
CREATE [OR REPLACE] [FORCE] VIEW view_name [(alias[, alias]...)] AS select_statement [WITH CHECK OPTION] [WITH READ ONLY];
三、创建视图
使用 WITH CHECK OPTION 选项创建视图
create or replace view view2 as select * from student where sno=3 with check option;
使用 ORDER BY 子句创建视图
create or replace view view3 as select * from student order by sno desc;
创建带有错误的视图
CREATE FORCE VIEW ven AS SELECT * FROM address;
四、例子
1、创建视图(基表不存在的情况下)——需要用force,会提示编译错误。(为什么要这么用,可能就是为了在设计数据库初期,设计人员先设计了视图,而后期单独再增加'基表'来用)
SQL>create force view view1 as select * from emp10;
SQL>select view_name from user_views;
2、创建视图(基表存在的情况下)
3、查看两种表
如果把view1的基表emp10创建上,就可以正常访问了
五、with check option 和with read only——视图的更改会影响到基表
用于对视图的操作,如update,delete等,而上述with check option可以禁止用户对view直接操作基表。
SQL>create view view3 as select * from emp with read only;
六、在create view时可以直接使用order by...desc/asc(而在oracle中是无法使用的,只能在select * from view4 order by sal desc这样)
七、连接视图——(先连接表,再进行创建视图)
八、视图的DML语句
-
在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE(前提是,视图是单表视图比较容易改。)
-
视图上的DML语句有如下限制:
(1)只能修改一个底层的基表
(2)如果修改违反了基表的约束条件,则无法更新视图
(3)如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图
(4)如果视图包含伪列或表达式,则将无法更新视图
八、键保留表,非键值保留表
1、创建student,department表,以及view_stu_dept连接视图
create table student(sno number(6) primary key,sname varchar2(10),deptno char(3)); insert into student values(1,'zhangsan','001'); insert into student values(2,'lisi','002'); insert into student values(3,'wangwu','003'); create table department(deptno char(3) primary key,deptname varchar2(20)); insert into department values('001','Chinese'); insert into department values('002','MATH'); insert into department values('003','ENGLISH'); create view view_stu_dept as select s.sno,s.sname,s.deptno deptno1,d.deptno deptno2,d.deptname from student s,department d where s.deptno=d.deptno;
键值保留表:一张表,在原表中的主键,关联视图后,在视图中,仍然作为主键列,此主键列的表,称为键保留表。上例中,student的sno在view中仍然为主键。
非键保留表:一张表,在原表中的主键,关联视图后,在视图中,不被作为主键列,此主键列的表,称为键保留表。上例中,department的deptname在view中仍然为主键。
更新视图:SQL> update view_stu_dept set sno=1 where sno=11;
非键值保留表中的列可以更新
键值保留表中的列不可以更新
九、instead of 触发器(可以对费键值保留表的更改)
十、视图中的函数
视图中可以使用单行函数、分组函数和表达式
必须为使用函数或者表达式的字段指定一个别名
CREATE VIEW item_view AS SELECT itemcode, LOWER(itemdesc) item_desc FROM itemfile;
SQL> create view view_upper as select sno,upper(sname) new_name from student;
十一、删除视图
SQL>drop veiw view_upper;
文章评论