数据库中的视图

这篇文章讲的是数据库中的视图,如有错误或不当之处,还望各位大神批评指正。

什么是视图?

视图(View)是从一个或多个表(或视图)导出的表。视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。——来自百度百科

视图的作用

  • 简单性。看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
  • 安全性。通过视图用户只能查询和修改他们所能见到的数据。数据库中的其它数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以
  • 逻辑数据独立性。视图可帮助用户屏蔽真实表结构变化带来的影响。

数据说明

有五个表:学生表,老师表,课程表,学院表,课程成绩表。

表结构

这里写图片描述

初始数据
  1. 学生表
    这里写图片描述
  2. 老师表
    这里写图片描述
  3. 课程表
    这里写图片描述
  4. 学院表
    这里写图片描述
  5. 课程成绩表
    这里写图片描述

创建视图CREATE VIEW

创建视图student_score_view ,要求包含学生id,姓名,课程名,分数(简单视图:不带组函数)

create view std_score_view
as 
select s.s_id , s_name , c_name , score 
from t_grade g join t_student s on g.s_id = s.s_id 
               join t_course c on c.c_id = g.c_id

创建完成:
这里写图片描述

创建课程的平均分包括,课程id,课程名,平均分(复杂视图:含有组函数的视图)

create or replace view score_avg_view
as select c.c_id , c_name , avg(score) avg_score
from t_grade g join t_course c on c.c_id = g.c_id
group by c.c_id , c_name ;

创建完成:
这里写图片描述

对视图的操作

将‘叶清逸’同学的‘java语言’的成绩修改为85(update)

update std_score_view
set score = 85
where s_name = '叶清逸' and c_name = 'java语言' ;

修改结果:
这里写图片描述

同时在t_grade表中该成绩也被修改
这里写图片描述

将‘叶清逸’同学的‘java语言’的成绩删除(delete)

delete from std_score_view
where s_name = '叶清逸' and c_name = 'java语言' ;

删除结果:
这里写图片描述

同时在对应基表也做出修改

修改视图删除视图中的s_id列并给视图添加只读权限

create or replace view std_score_view
as select s_name , c_name , score 
from t_grade g join t_student s on g.s_id = s.s_id 
               join t_course c on c.c_id = g.c_id
with read only ;

此时视图只能读取不能修改,否则报错。

删除视图score_avg_view

drop view score_avg_view ;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值