数据库的视图,视图的更新,视图的可操作性
SQL数据库结构
(1)基本表是实际存储于存储文件中的表,基本表的数据是需要存储的。
(2)视图在SQL中只存储其由基本表导出视图所需要的公式,即由基本表所产生视图的映像信息,其数据并不存储,而实在运行的过程中进行动态产生和维护的。
(3)对视图数据的更改最终要反应在对基本表的更改上。
视图定义的格式
CREATE VIEW view_name [(列名[,列名]...)]
as 子查询[with check option]
#如果视图的属性名缺省,则默认为子查询结果中的属性名;
#也可以显示的指明其所拥有的列名。
#with check option指明当对视图进行insert,updata,delete的时候,要检查进行这些操作的元组是否满足视图定义中子查询中定义的条件的表达式
实例:定义一个视图CompStud为计算机系的学生,通过该视图可以将Student表中其他系的学生进行屏蔽掉。
#下面的select语句实际上为一个EC映像也就是怎么从基本表中导出这个视图。
Create View CompStud AS(Select * From StudentWhere D# in(Select D# From DeptWhere Dname= "计算机"));
实例:定义一个视图Teach为教师任课的情况,把Teacher表中的个人隐私方面的信息,如工资等屏蔽调,仅反映了其教授那门课以及其学分等。
Create View Teach AS(Select T.Tname,C.Cname,CreditFrom Teacher T,Courcse CWhere T.T# = C.T#
)
使用视图:定义好的视图可以像Table一样,在SQL各种语句中进行使用
实例:(1)检索教授数据库课程的教师的姓名可以用Teach
(2)检索计算机系所有的学生可以用CompStud
(3)检索计算机系年龄小于20的所有学生
Select T.Tname From Teach T
Where T.Cname = "数据库";Select * From CompStud;Select * From CompStud
Where Sage < 20 ;
定义视图,有的时候额可以方便用户进行检索操作:
实例:定义视图StudStat,描述学生的平均成绩、最高成绩、最低成绩等。
Create View StudStat(S#,Sname,AvgS,MinS,MaxS,CNT)
as (Select S#,Sname,AVG(Score),MIN(Score),MAX(Score),Count(*)From Student S,SC Where S.S#=SC.S#Group by S.S#);
实例:基于视图StudStat检索某一个学生的平均成绩
Select Sname,AvgS From StudStat Where Sname = "zhangsan";
SQL视图的更新:是比较复杂的问题,因为视图不保存数据,对视图的更新最终要反应到对基本表的更欣赏,但是有的时候视图的定义的映射并不是可逆的。
create view S_G(S#,Savg)as (select S#,AVG(Score)from SC group by S#);
如果要进行如下的更新操作
update S_G
set Savg = 85
where S# = "98030101"
不可以更新,因为平均成绩无法反映到原本的表中。
实例:插入一条数据,如果没有主键也不会发生更新。因为缺少S#,而S#是Student的主键。
Create view ClassStud(Sname,Sclass)as (select Sname,Sclassfrom Student);#执行以下操作
Insert into ClassStud
Values("zhangsan","0301")
SQL视图更新的可执行性:
(1)如果视图的select目标列包含聚集函数(求和、求平均之类的),则不能更新。
(2)如果视图的select子句使用了union或者distinct,则不能更新。
(3)如果视图中使用了group by子句,则不能更新。
(4)如果视图中包括经过算术表达式计算出来的列,则不能更新。
(5)如果视图由单个表的列构成,但是没有包含主键,则不能进行更新。
可以更新的:对于由单一Table子集构成的视图,如果视图是从耽搁基本表使用选择、投影操作导出出来的,而且包含了基本表的主键则可以进行更新。
视图的更新转换为对基本表的更新:缺失的位置会写上Null。
数据库的视图,视图的更新,视图的可操作性相关推荐
- 关于数据库视图作用、更新视图的理解
一.什么是视图 概念:视图是从一个或几个基本表(视图)导出的表. 个人理解:从创建的SQL的语句来看,语句中通常包含SELECT语句.所以视图一定是基于表产生的,基于存在的视图生成的视图,其基础依然是 ...
- SQL语法——创建视图、可更新视图
CREATE VIEW语句简介 CREATE [ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}] VIEW view_name [(column_list)] ...
- MySql数据库之视图(定义视图、查询视图、更新视图、视图的作用)
目录 一.定义视图 1.建立视图 2.删除视图 二.查询视图 三.更新视图 四.视图的作用 一.定义视图 1.建立视图 语法:CREATE VIEW 视图名 [列名]... AS 子查询 [WITH ...
- 第14章_视图(创建视图、查看视图、更新视图的数据、修改、删除视图)
第14章_视图 第14章_视图 1. 常见的数据库对象 2. 视图概述 2.1 为什么使用视图? 2.2 视图的理解 3. 创建视图 3.1 创建单表视图 3.2 创建多表联合视图 3.3 基于视图创 ...
- 数据库视图解析[普通视图、物化视图以及通过修改视图修改数据]
1. 关系型数据库的视图 1.1. 视图 视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式 ...
- [朝花夕拾]可更新视图
可更新视图 1.视图概述 视图是从一个或多个基表(或视图)导出的表.通常视图仅仅是一个虚表,即数据库中只存放视图的定义信息等元数据,而不存放视图对应的数据. 视图上的操作和基表类似,但是 DBMS对 ...
- 数据库实验:数据库和表、查询、视图与安全性、存储过程及游标、触发器、综合实验-水果商店进阶
数据库实验:数据库和表.查询.视图与安全性.存储过程及游标.触发器.综合实验-水果商店进阶 实验一.数据库和表 源码1: 源码2: 小结 实验二.查询 源码 小结 实验三.视图.安全性 源码: 小结 ...
- laravel mysql视图_php-动态更新Laravel视图
我正在通过JS从API加载数据,将数据发送到Laravel控制器并将其保存到数据库中.加载所有Ajax之后,我想在master.blade的子视图/部分中显示数据-可以在页面加载完成后动态呈现视图,- ...
- 创建数据库_详解Oracle数据库物化视图及创建物化视图索引
概述 物化视图是一种特殊的物理表,"物化"(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图S ...
- ViewPager PagerAdapter未更新视图
我正在使用兼容性库中的ViewPager. 我已经巧妙地让它显示了几个我可以翻阅的视图. 但是,我很难弄清楚如何使用一组新视图更新ViewPager. 我已经尝试了各种各样的事情,比如调用mAdapt ...
最新文章
- RecycleView 各个条目的信息混乱
- oracle flashback table 参数,Oracle10g中FLASHBACK TABLE语句恢复DML误操作
- linux大小写敏感和windows大小写不敏感(忽略大小写)导致的直接拷贝文件文件名冲突问题(需要打tar包再分享)
- redis中list类型详解及常用命令
- Silverlight+WCF 新手实例 象棋 棋子定位与象棋类(四)
- Java 设计模式之装饰器模式
- 特斯拉将国产Model 3后轮驱动版售价上调1.5万元
- 都是第一,3143亿背后科技公司贡献了多少?
- 百度智能云新型产品了解
- python——sort方法、sorted函数——排序
- RFC2544性能测试
- 自定义view之无限滚动的刻度尺
- 多校HDU.5724 Chess
- 苏宁RPC远程服务调用框架RSF
- [LabVIEW]--通过LabVIEW打开计算机摄像头、图像显示、拍照。
- LabVIEW读海康网络摄像头问题
- android ios 重力感应器,iOS实时获取当前的屏幕方向之重力感应
- 虹软:中小企业该如何拥抱 AI
- ubc 文学院 计算机,英属哥伦比亚大学UBC专业
- 从LiveJournal后台发展看大规模网站性能优化方法 于敦德 2006-3-16