数据库视图的详细解析

推荐阅读

给软件行业带来了春天——揭秘Spring究竟是何方神圣(一)
给软件行业带来了春天——揭秘Spring究竟是何方神圣(二)



视图

视图也是数据库对象之一
所有数据库对象名字不可重复,以“v_”开头的视图名相对来说更规范。

视图在是SQL语句中体现的角色与表相同,但是视图并不是一张真实存在的表,而只是对应一个select 语句的查询结果集,并将其当做表看待而已。
使用视图的目的是为了简化SQL语句的复杂度,重用子查询,限制数据访问。
image.png

创建视图
create view v_k_depino
as 
select kname,depino,sal
from k

desc v_k_depino

image.png

查看视图数据

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

视图分类

视图分为简单视图和复杂视图

简单视图

简单视图:对应的子查询中不含有关联查询,查询字段不包含函数,表达式等,没有分组没有去重,反之,则是复杂视图。

image.png

对视图进行DML操作。
仅能对简单视图进行DML操作,对视图进行DML操作就是对视图数据来源的基础表进行操作。

插入数据

insert into v_k_depino(name,s,depino) values('d',2300,30)
select *from v_k_depino
select * from k

image.png

更改数据

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
image.png
为视图添加检查选项,可以保证对视图的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,代表只读,不允许操作 。

数据字典

image.png

select object_name from user_objects
//objects,查出所有数据库对象

image.png

select text,view_name from user_views//查视图名,text显示当时写入的SQL语句
select table_name from user_tables //查数据库名

image.png

复杂视图

复杂视图

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

删除视图

删除视图本身不影响基表,但是删除数据,会影响基表本身,会删除基表对应的数据。
image.png

drop view v_k

image.png

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天马行空的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值