视图
视图也是数据库对象之一
所有数据库对象名字不可重复,以“v_”开头的视图名相对来说更规范。
视图在是SQL语句中体现的角色与表相同,但是视图并不是一张真实存在的表,而只是对应一个select 语句的查询结果集,并将其当做表看待而已。
使用视图的目的是为了简化SQL语句的复杂度,重用子查询,限制数据访问。
创建视图
create view v_k_depino as select kname,depino,sal from k desc v_k_depino
查看视图数据
select *from v_k_depino select *from (select kname,depino,sal from k)
视图对应的子查询中的字段若有函数或者表达式,那么该字段必须使用别名。
当视图对应的子查询中的字段使用了别名,那么视图中该字段就用别名来命名。
修改视图
由于视图仅仅对应一个select语句,所以修改视图就是替换该select语句而已。
create or replace view v_k_depino as select kname name,depino,sal s from k
视图分类
视图分为简单视图和复杂视图
简单视图
简单视图:对应的子查询中不含有关联查询,查询字段不包含函数,表达式等,没有分组没有去重,反之,则是复杂视图。
对视图进行DML操作。
仅能对简单视图进行DML操作,对视图进行DML操作就是对视图数据来源的基础表进行操作。
插入数据
insert into v_k_depino(name,s,depino) values('d',2300,30) select *from v_k_depino select * from k
更改数据
update v_k_depino set s=1800 where name='cc' select * from k
删除数据
delete from v_k_depino where name='cc'
对数据的DML操作就是对基表操作,那么操作不当可能对基表进行数据污染。
只有删除操作删除不了视图中没有或者看不见的数据,但是可以删除视图中存在或可见的数据,但是在视图中进行了更新,插入操作,即使这是视图中的不可见的数据,操作也能进行,这就对基表产生了污染。
with check option
为视图添加检查选项,可以保证对视图的DML操作后视图对其可见,否则不允许进行DML操作,这样就可以避免数据污染。
create view v_k_depino as select kname,depino,sal from k where depino=20 with check option
为视图添加只读选项,不允许该视图进行DML 操作。在SQL语句后加上
with read only,代表只读,不允许操作 。
数据字典
select object_name from user_objects //objects,查出所有数据库对象
select text,view_name from user_views//查视图名,text显示当时写入的SQL语句 select table_name from user_tables //查数据库名
复杂视图
复杂视图
create view v_k as select h.loc,k.kname,min(sal) msal,sum(sal) ssal from k,h where k.depino=h.depino group by h.loc,k.kname
删除视图
删除视图本身不影响基表,但是删除数据,会影响基表本身,会删除基表对应的数据。
drop view v_k