实验八 视图数据库
1、实验目的:安全
1.了解视图的概念和与基本表的区别。函数
2.掌握SQL建立视图的方法。测试
3.掌握视图更新与基本表更新的相关性spa
4.3d
2、实验内容blog
1.基本知识排序
建立视图的命令it
1) create view <视图名>io
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视图。
命令是?
可以插入吗?
4、总结:
0.建立视图的几种形式。
1.视图能够从基本表导出,也能够从视图导出。
2.视图不保存数据,数据保存在基本表中。
3.更新基本表,视图数据会发生变化;成功更新视图,
基本表也会发生变化。
4.更新视图不成功的状况很常见。不能知足建立视图where条件的更新不可以更新;有多个表或视图导出的视图不可以更新;有group by或汇集函数的视图不可以更新。