实验八 视图(V2.0)
实验八 视图
一、实验目的:
1.了解视图的概念和与基本表的区别。
2.掌握SQL创建视图的方法。
3.掌握视图更新与基本表更新的相关性
4.
二、实验内容
1.基本知识
创建视图的命令
1) create view <视图名>
2) as
3) select <目标列>
4) from <表名列表>
5) [where 查询条件]
6) [group by 分组数据 having 分组筛选条件]
7) [with check option]
说明:
1) 视图名的起名规则,遵循标识符的命名规则。
2) 子查询的查询结果为视图。视图是查询的定义,数据存储在基本表,所以视图是虚表。
3) 子查询不能进行排序。所以没有Order by子句。
4) 当使用with check option子句时,将会在更新视图时,强制附加where条件的内容。
2.创建视图
实验1:创建CS系学生信息视图CS_VIEW
命令:
create view CS_VIEW
as
select *
from student
where sdept = 'CS'
with check option;
完成实验
:创建视图后,更新基本表(更新200215121学生的年龄为21岁),重新查看视图内数据,有没有更新?将用到的命令、测试过程和说明的问题记录清楚。
会更新。说明视图只是定义,不保存数据,数据来源于基本表,视图的数据来源于基本表。视图是个虚表,不占用存储空间。
实验2:创建数据库课程学生成绩单。
DS_GRADE(学号,姓名,成绩)
说明:视图可以来源于多个表。
注意:视图也可以在视图的基础上进行创建。
实验3:创建一个各系学生人数统计视图。SDEPT_VIEW(系名,人数)
Create view sdept_view
As
Select sdept 系名,count(*) 人数
From student
Group by sdept
视图的创建可以使用分组和聚集函数,使用户只能看到统计结果,不能看到明细,体现了数据的安全性。
3.修改数据更新视图
实验4:通过CS_View更新CS系学生的年龄增加1岁。
命令:
update CS_VIEW
set sage = sage + 1;
命令能够执行,查看基本表和视图数据是否已更新。基本表数据更新了吗?视图数据更新了吗?
实验5:更新DS_GRADE视图内200215121学生的成绩为85.
命令:update DS_GRADE
set grade = 85
where sno = '200215121'
结果:命令成功?还是不成功?为什么?
4.插入数据更新视图
实验6:插入一学生(200215126,张三,男,20)到CS_VIEW视图。
命令:
insert into cs_view
values('200215126','张三','男',20)
查看基本表student和CS_VIEW视图,有什么情况?
基本表内能够查询到,而CS_View视图内,没有
说明:
1.在创建视图CS_VIEW时,没有加可选子句with check option,通过视图插入的数据不经过视图where子句检验,插入的数据不满足sdept为CS也没有问题,所以这个没有sdept的值(为NULL)数据能够插入(到基本表),而视图内看不到不是CS系的学生数据。
2.如果在创建CS_VIEW时,使用了with check option子句,则通过视图插入数据时,需要检验数据是否为CS系的数据(满足提高安全性的要求),如果满足则能够插入,否则不允许插入。
注意:
在定义视图时With check option的作用。
命令7:插入('200215127','李四',87)到视图DS_GRADE。
命令?
执行情况?
实验8:插入(’ABC’,1)到SDEPT_VIEW视图。
命令是?
能够插入吗?
四、总结:
0.创建视图的几种形式。
1.视图可以从基本表导出,也可以从视图导出。
2.视图不保存数据,数据保存在基本表中。
3.更新基本表,视图数据会发生变化;成功更新视图,
基本表也会发生变化。
4.更新视图不成功的情况很常见。不能满足创建视图where条件的更新不能够更新;有多个表或视图导出的视图不能够更新;有group by或聚集函数的视图不能够更新。