视图简介:
视图是从一个或多个实体表(或视图)导出的表。数据库中只存放视图的定义,而不存放视图对应的数据。所以当实体表数据发生该表,视图的数据也会发生改变。
*语法:
create [ force | noforce ] [ or replace ] view 视图名称 [ (列别名1,列别名2) ] as 子查询
参数:
force:表示创建视图的表不存在也可创建视图
no force:(默认)创建视图的表存在才能创建视图
or replace:如果视图不存在则创建一个视图,若存在则替换
#例子:
create view v_myview as select * from emp where sal >2000;
注意:
在Oracle 10g R2之后,默认情况下,scott 用户没有创建视图的权限。如何解决:先用管理员身份登录,授权:
1、按control+R,输入:"sqlplus/nolog"
2、切换用户,输入:"conn sys/change_on_install as sysdba ;"
3、授权,输入:"grant create view to c##Scott;"
数据库的视图字典:user_views
select * from user_views 可以查看这个数据库所有哦视图信息。
在视图中增加数据:
insert into v_myview (empno,ename,job,sal,deptno) values (8888,'Miki','clerk',2001,20);
在视图中修改数据:
update v_myview set ename='miki' ,job ='manager',sal=2300 where empno=8888;
在视图中删除数据:
delete from v_myview where empno=8888;
注意:
1、只有在简单视图语句,关联一张表的视图是可以执行insert、update、delete语句,复杂视图语句是不能执行insert、update语句, 可以执行delete语句,但他会把第一张实体表数据删除,其他实体表不做处理。
2、视图增加数据和实体表中增加数据语法是一样的,但视图增加数据实际上是在对应的实体表中增加数据,而某列没有增加数据的则为null,如果表有不为空约束则会报错。
3、视图操作只建议用作查询,不建议做其他操作。因为视图本身不是真实数据,属于映射数据,修改数据应该在基表中操作。
with check option 子句:限制创建视图where子句关键字段不被修改。
*语法:子查询后面加 [ with check option [constraint 约束名] ]
#列子:
create or replace view v_emp20 as select * from emp where deptno =20 with check option constraint v_emp20_ck;
注意:这个只能限制deptno这个字段不被修改,如执行"update v_emp20 set deptno =30 where empno=6688"会被报错。但其他字段依然可以被修改,如:"update v_emp20 set ename='miki' ,sal=200 where empno=6688"则可以被修改。
with read only 子句:限制视图所有字段不可修改,设置为只读视图。
*语法:子查询后面加 [with read only 子句]
#例子:
create or replace view v_empno20 as select * from emp where deptno=20 with read only ;
删除视图:
*语法:
drop view 视图名称
----------------------------------------------------------如有不足还请各位指正---------------------------------------------------------