目录
一. 视图的特点
二. 基于视图的操作
2.1 建立视图
1)行列子集视图举例:
2)基于多个基表的视图:
3)基于视图的视图:
4)带表达式的视图:
5)建立分组视图:
2.2 删除视图
2.3 查询视图
2.4 更新视图
1)更新视图的限制:
2)DB2对视图更新的限制:
三. 视图的作用
3.1 视图能够简化用户的操作
3.2 视图使用户能以多种角度看待同一数据
3.3 视图对重构数据库提供了一定程度的逻辑独立性
3.4 视图能够对机密数据提供安全保护
四. 数据库专栏
一. 视图的特点
- 虚表,是从一个或几个基本表(或视图)导出的表;
- 只存放视图的定义,不会出现数据冗余;
- 基表中的数据发生变化,从视图中查询出的数据也随之改变
二. 基于视图的操作
- 定义;
- 查询;
- 删除;
- 受限更新;
- 定义基于该视图的新视图;
2.1 建立视图
语句格式:
CREATE VIEW<视图名> (<列名> ,<列名>…)AS<子查询>WITH CHECK OPTION;
- 行列子集视图:从单个基本表导出,只是去掉了基本表的某些行和某些列,保留了码;
- WITH CHECK OPTION:透过视图进行增删改操作时,不得破坏视 图定义中的谓词条件 (即子查询中的条件表达式);
1)行列子集视图举例:
CREATE VIEW IS_StudentAS SELECT Sno,Sname,SageFROM StudentWHERE Sdept= 'IS';
2)基于多个基表的视图:
CREATE VIEW IS_S1(Sno,Sname,Grade)AS SELECT Student.Sno,Sname,GradeFROM Student,SCWHERE Sdept= 'IS' ANDStudent.Sno=SC.Sno ANDSC.Cno= '1';
3)基于视图的视图:
CREATE VIEW IS_S2ASSELECT Sno,Sname,GradeFROM IS_S1WHERE Grade>=90;
4)带表达式的视图:
CREATE VIEW BT_S(Sno,Sname,Sbirth)AS SELECT Sno,Sname,2006-SageFROM Student
设置一些派生属性列, 也称为虚拟列--Sbirth 带表达式的视图必须明确定义组成视图的各个属性列名;
5)建立分组视图:
CREAT VIEW S_G(Sno,Gavg)AS SELECT Sno,AVG(Grade)FROM SCGROUP BY Sno;
2.2 删除视图
语句格式:
DROP VIEW <视图名>;
- 该语句从数据字典中删除指定的视图定义;
- 由该视图导出的其他视图定义仍在数据字典中,但已不能使用,必须显式删除;
- 删除基表时,由该基表导出的所有视图定义都必须显式删除;
2.3 查询视图
- 从用户角度:查询视图与查询基本表相同;
- DBMS实现视图查询的方法:实体化视图(View Materialization)
- 有效性检查:检查所查询的视图是否存在;
- 执行视图定义,将视图临时实体化,生成临时表;
- 查询视图转换为查询临时表;
- 查询完毕删除被实体化的视图(临时表)
在上面创建的IS_Student视图中找出年龄小于20岁的学生:
SELECT Sno,Sage
FROM IS_Student
WHERE Sage<20;
2.4 更新视图
- 用户角度:更新视图与更新基本表相同;
- DBMS实现视图更新的方法:
- 视图实体化法(View Materialization)
- 视图消解法(View Resolution)
- 指定WITH CHECK OPTION子句后:
- DBMS在更新视图时会进行检查,防止用户通过视图对不属于视图范围内的基本表数据进行更新
1)更新视图的限制:
一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新(对两类方法均如此)
- 允许对行列子集视图进行更新;
- 对其他类型视图的更新不同系统有不同限制;
2)DB2对视图更新的限制:
- 若视图是由两个以上基本表导出的,则此视图不允许更新。
- 若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行DELETE操作。
- 若视图的字段来自集函数,则此视图不允许更新。
- 若视图定义中含有GROUP BY子句,则此视图不允许更新。
- 若视图定义中含有DISTINCT短语,则此视图不允许更新。
- 若视图定义中有嵌套查询,并且内层查询的FROM子句中涉及的表也是导出该视图的基本表,则此视图不允许更新。
- 一个不允许更新的视图上定义的视图也不允许更新。
三. 视图的作用
3.1 视图能够简化用户的操作
当视图中数据不是直接来自基本表时,定义视图能够简化用户的操作:
- 基于多张表连接形成的视图;
- 基于复杂嵌套查询的视图;
- 含导出属性的视图;
3.2 视图使用户能以多种角度看待同一数据
视图机制能使不同用户以不同方式看待同一数据,适应数据库共享的需要;
3.3 视图对重构数据库提供了一定程度的逻辑独立性
- 物理独立性与逻辑独立性的概念;
- 视图在一定程度上保证了数据的逻辑独立性;
- 视图只能在一定程度上提供数据的逻辑独立性:
- 由于对视图的更新是有条件的,因此应用程序中修改数据的语句可能仍会因基本表结构的改变而改变。
3.4 视图能够对机密数据提供安全保护
- 对不同用户定义不同视图,使每个用户只能看到他有权看到的数据;
- 通过WITH CHECK OPTION对关键数据定义操作时间限制;
四. 数据库专栏
https://blog.csdn.net/weixin_53919192/category_11813282.html?spm=1001.2014.3001.5482https://blog.csdn.net/weixin_53919192/category_11813282.html?spm=1001.2014.3001.5482