视图的作用:
- 视图能够简化用户的操作
- 视图使用户能以多种角度看待同一数据
- 视图对重构数据库提供了一定程度的逻辑
- 视图能够对机密数据提供安全保护
- 适当的利用视图可以清新表达查询
**视图的特点:
- 虚表,从一(多)表(或视图)导出
- 只存放视图的定义,不存放视图对应的数据
- 基表中的数据发生变化,从视图中查询出的数据随之改变
一、建立视图**
with check option:
- 对视图进行update,insert,delect操作时要满足视图定义中的谓词(即子查询中的条件表达式)
- 子查询可以是任意的select语句,是否可以distinct和order by则决定具体系统的实现。
组成视图的属性列名:全部省略或全部指定
- 全部省略:
- 明确指定视图的所有列名
涉及的表:
例1、建立软件工程系学生的视图
例2、建立软件工程系学生的视图,并要求进行修改和更新操作时仍需保证该视图只有软件工程系的学生
with check option的作用:
- 如果没有with check option约束,我可以通过视图’软件工程_student’向基本表student中插入和更新不是软件工程的学生记录
- 加了with check option之后,视图 ‘软件工程_student2’ 只能向基本表student中插入和更新是软件工程的学生记录,插入的值中的系一定要指明是软件工程。
行列子集视图: 从一个基本表导出,并且只是去掉了基本表的某些行和某些列。,且保留了主码。
基于多个表的视图:
例3、建立软件工程选修了c1课程的学生视图(包括学 、姓名、成绩)
例3、建立软件工程选修了c1课程的学生视图且成绩在90分以上的学生视图。
带表达式的视图:
例1、定义一个反映学生出生年份的视图
分组视图:
例1、将学生的学 及平均成绩定义为一个视图
建立视图的语句中子查询没有指定属性列的缺点: 修改基本表结构后,基本表和视图的映像关系会被破坏,导致该视图不能正确工作。
二、删除视图
- 该语句从数据字典中删除指定的视图定义
- 如果该视图上还导出了其他视图,使用cascade级联删除语句,把该视图和由它导出的所有视图一起删除
- 删除基表时,由该基表导出的所有视图定义都必须显式地使用drop view语句删除
cascade级联:
三、查询视图
用户角度:查询视图与查询基本表相同
视图消解法:
- 进行有效性检查
- 转换成等价的对基本表的查询
- 执行修正后的查询
单表:
1、在软件工程系学生的视图中找出年龄小于20岁的学生
多表:
2、查询选修了c1课程的软件工程系的学生
视图消解法的局限:不能对分组后聚集的视图生成正确的查询。
三、更新视图
例1、将软件工程系学生视图 软件工程_student中学 为 20200001的学生姓名改为 ‘’virus‘
例2、向软件工程系学生视图 软件工程_student中插入一个新的学生记录,学 为 20200002,姓名为 “李四” ,年龄为 20
例3、删除软件工程系学生视图 软件工程_student中学 为 20200002 的学生记录
更新的限制:
- 允许对行列子集视图进行更新
- 对其他类型视图的更新不同系统有不同的限制
- 一个不允许更新的视图上定义的视图也不允许更新
- 若视图字段来自字段表达式或常数,则只允许对该视图进行delete操作
- 若视图定义中含有distinct短语,则此视图不允许更新
- 若视图定义中有嵌套查询,并且内层查询的from子句中涉及的表也是导出该视图的基本表,则此视图不允许更新
文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树SQL高级技巧CTE和递归查询32779 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!