数据库原理-视图
- 格式:pdf
- 大小:236.88 KB
- 文档页数:7
什么是数据库视图作⽤有哪些 数据库视图即视图所对应的数据不进⾏实际存储,数据库中只存储视图的定义,外⾏对于数据库视图表⽰不理解。
以下是由店铺整理关于数据库视图的内容,希望⼤家喜欢! 数据库视图的介绍 视图是虚表,是从⼀个或⼏个基本表(或视图)中导出的表,在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。
视图是原始数据库数据的⼀种变换,是查看表中数据的另外⼀种⽅式。
可以将视图看成是⼀个移动的窗⼝,通过它可以看到感兴趣的数据。
、视图是从⼀个或多个实际表中获得的,这些表的数据存放在数据库中。
那些⽤于产⽣视图的表叫做该视图的基表。
⼀个视图也可以从另⼀个视图中产⽣。
视图的定义存在数据库中,与此定义相关的数据并没有再存⼀份于数据库中。
通过视图看到的数据存放在基表中。
视图看上去⾮常像数据库的物理表,对它的操作同任何其它的表⼀样。
当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会⾃动反映在由基表产⽣的视图中。
由于逻辑上的原因,有些视图可以修改对应的基表,⽽有些则不能(仅仅能查询)。
数据库视图的作⽤ 简单性。
看到的就是需要的。
视图不仅可以简化⽤户对数据的理解,也可以简化他们的操作。
那些被经常使⽤的查询可以被定义为视图,从⽽使得⽤户不必为以后的操作每次指定全部的条件。
安全性。
通过视图⽤户只能查询和修改他们所能见到的数据。
数据库中的其它数据则既看不见也取不到。
数据库授权命令可以使每个⽤户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定⾏和特定的列上。
通过视图,⽤户可以被限制在数据的不同⼦集上: 使⽤权限可被限制在基表的⾏的⼦集上。
使⽤权限可被限制在基表的列的⼦集上。
使⽤权限可被限制在基表的⾏和列的⼦集上。
使⽤权限可被限制在多个基表的连接所限定的⾏上。
使⽤权限可被限制在基表中的数据的统计汇总上。
使⽤权限可被限制在另⼀视图的⼀个⼦集上,或是⼀些视图和基表合并后的⼦集上。
数据库视图原理
数据库视图是数据库中的一种虚拟表,它是基于数据库表的查询结果集的可视化展示。
视图不存储任何数据,而只是存储了查询语句。
它提供了一种简化和抽象化表格数据的方式,使用户可以方便地访问和操作数据,同时隐藏了底层表的复杂性。
视图的创建是通过查询语句来定义的,该查询语句可以包含一个或多个表,还可以进行过滤、连接、计算和聚合等操作。
用户可以根据自己的需求创建不同的视图,以满足不同的查询和分析需求。
视图的原理是通过在查询时实时执行定义视图时的查询语句,将结果返回给用户。
当用户查询视图时,实际上是执行了视图定义的查询语句,而不是直接查询底层的表。
这种方式可以避免用户直接对底层表进行操作,保证了数据的安全性和完整性。
视图对用户来说是透明的,用户可以像查询表一样对视图进行查询和操作,而不需要了解底层表的细节。
视图还可以提供额外的数据约束,限制用户对数据的访问和操作。
视图的使用可以提供更高的数据抽象和封装,简化了数据库的使用和管理。
它可以隐藏表的具体结构和关系,提供更简洁、直观的数据展示和操作界面。
同时,视图还可以简化复杂的查询操作,提高查询性能和灵活性。
总之,数据库视图是一种基于查询语句的虚拟表,通过实时执行查询语句来提供数据的可视化展示和操作。
它可以简化数据
库的使用和管理,提高数据的安全性和完整性。
视图对用户来说是透明的,提供了更高的数据抽象和封装。
数据库视图的解释
数据库视图
1.什么是视图
视图是⼀个虚拟的表,它不在数据库中以存储数据的
形式保存,是在使⽤视图的时候动态⽣成。
2.视图的特点
2.1视图是由基本表产⽣的虚表
2.2视图的更新和删除会影响基础表
2.3基础表的更新和删除也会影响到视图
3.视图的作⽤
对视图的操作与对基本表的操作都是⼀样的(包括alter,create,insert into ,update ,delete ,select),且⼆者任意⼀⽅的字段值被修改,都会实时影响到对⽅(如修改view的字段值,会同步修改table相应的字段值);
但是视图的创建是基于基本表的,它的作⽤可以对基本表的敏感信息进⾏保护;
在实际⼯作中,出于安全考虑,将⽤户常⽤的信息创建成视图给⽤户调⽤,避免了直接操作基本表!
4. 显⽰⽬前有哪些视图
show tables;创建的视图都在表的最下⾯。
create view A as (select id,name from dcs); //将查询结果集创建为视图A
show CREATE VIEW A(视图名)//创建给定视图
Show tables //查看视图
drop view 视图名; //删除视图。
什么是视图:视图(view):从一个或几个基本表中根据用户需要而做成一个虚表1:视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据2:视图只在刚刚打开的一瞬间,通过定义从基表中搜集数据,并展现给用户视图与查询的区别:视图和查询都是用由sql语句组成,这是他们相同的地方,但是视图和查询有着本质区别:它们的区别在于:1:存储上的区别:视图存储为数据库设计的一部分,而查询则不是.2:更新限制的要求不一样要注意:因为视图来自于表,所以通过视图可以间接对表进行更新,我们也可以通过update语句对表进行更新,但是对视图和查询更新限制是不同的,以下我们会知道虽然通过视图可以间接更新表但是有很多限制.3:排序结果:通过sql语句,可以对一个表进行排序,而视图则不行。
比如:创建一个含有order by子句的视图,看一下可以成功吗?视图的优点:为什么有了表还要引入视图呢?这是因为视图具有以下几个优点:1:能分割数据,简化观点。
可以通过select和where来定义视图,从而可以分割数据基表中某些对于用户不关心的数据,使用户把注意力集中到所关心的数据列.进一步简化浏览数据工作2:为数据提供一定的逻辑独立性。
如果为某一个基表定义一个视图,即使以后基本表的内容的发生改变了也不会影响“视图定义”所得到的数据3:提供自动的安全保护功能。
视图能像基本表一样授予或撤消访问许可权4:视图可以间接对表进行更新,因此视图的更新就是表的更新视图的创建和管理视图的创建1:通过sql语句格式:create view 视图名 as select 语句试一试:分别创建关于一个表或多个表的视图[因为视图可以来自于多表] 2:通过企业管理器说明:1:在完成视图的创立之后,就可以像使用基本表一样来使用视图2:在创建视图时,并非所有的select子查询都可用,如:compute和compute by,order by[除非与top一起连用]3:但在查询时,依然都可以用在创建时禁用的select子查询4:在视图创建时,必须为没有标题列指定标题[思考:能否不用select语句来创建一个视图]视图的删除:1:通过sql语句:drop view 视图名2:通过企业管理器说明:与删除表不同的是,删除视图后只是删除了视图了定义,并没有删除表中的数据.[查看相关性]修改视图的定义1:通过企业管理器2:通过sql语句:格式:alter view 视图名 as 新的select语句浏览视图信息 sp_helptext 视图名 [查看视图创建的语句]如何通过视图修改基本表的数据.A:在视图上使用insert语句通过视图插入数据与直接在表中插入数据一样,但视图毕竟不是基本表.因此在进行数据插入时还是有一定的限制1:如果视图上没有包括基本表中属性为not null[不能为空]的列,那么插入操作会因为那些列是null值而失败.2:如果某些列因为某些规则或约束的限制而不能直接接受从视图插入的列时,插入会失败3:如果在视图中包含了使用统计函数的结果,或是包含计算列,则插入操作会失败4:不能在使用了distinct语句的视图中插入值5:不能在使用了group by语句的视图中插入值B:使用update更新视图中的数据1:更新视图与更新表格一样,但是在视图中使用了多个基本表连接的情况下,每次更新操作只能更新来自基本表的一个数据列例如:创建以下视图:create view del asselect 职工号,姓名,部门名称,负责人 from work1,部门where work1.部门编号=部门.部门编号如果再执行下面的语句时:update del set 职工号='001',部门名称='wenda'where 职工号='01'[出现错误]只能够改成:update del set 职工号='001' where 职工号='01'update del set 部门名称='wenda' where 职工号='01'2:不能在使用了distinct语句的视图中更新值3:不能在使用了group by语句的视图中更新值C:使用delete删除视图中数据.通过视图删除数据最终体现为从基本表中删除数据格式:delete 视图名 [where 条件]说明:当视图由两个以上的基表构成时,不允许删除视图的数据例如:建一个视图kkcreate view kk asselect 职工号,姓名,性别,部门名称 from work1,部门 where work1.部门编号=部门.部门编号 [试着去删除]使用with check option的视图如果不了解视图定义内容,则常常会发生向视图中输入不符合视图定义的数据的情况.比如:create view xm asselect * from work where 性别='男'完全可以插入insert xm values('001','女',23,'2400'....)尽管从意义上来说是不合理的,但是上述语句是正确的.为了防止这种情况的发生,可以使用with check option子句来对插入的或更改的数据进行限制.比如:create view xm asselect * from work where 性别='男' with check option使用schemabinding的视图[使用绑定到构架]我们知道视图是依赖于表,如果在一个表中创建一个视图,今后如果这个表被删除了,则这个视图将不可再用了.为了防止用户删除一个有视图在引用的表,可以在创建视图的时候加上schemabinding关键字.比如:create view 基本工资 with SCHEMABINDINGas select 姓名,性别,基本工资 from dbo.work说明:1:不能使用“*”来创建此类型的视图2:创建此类型的视图时,一定要加上dbo.表名.3:如果在某个表中定义了此类视图,则用户将不能对表的结构进行修改,否则会删除这些绑定4:如果用户对表的结构进行列改名,则会删除绑定而且视图不可用.5:如果用户对表的结构进行列的类型或者大小修改,则会删除绑定但视图可用,此时用户可以删除视图所引用的表.使用with encryption对视图进行加密为了保护创建视图定义的原代码,可以对视图进行加密.比如:create view kk with encryptionas select * from work where 职称='经理'用sp_helptext来查看一下.或用企业管理器查看一下.说明:如果应用此项用户将无法设计视图使用视图加强数据的安全一般通过使用视图共有三种途径加强数据的安全性A:对不同用户授予不同的使用权.B:通过使用select子句限制用户对某些底层基表的列的访问C:通过使用where子句限制用户对某些底层基表的行的访问,对不同用户授予不同的权限。
数据库-视图(View)详解⼀、简介视图(View)可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义⼀样,是另⼀种查看数据的⼊⼝.常规视图本⾝并不存储实际的数据,⽽仅仅存储⼀个Select语句和所涉及表的metadata。
视图简单理解如下:通过视图,客户端不再需要知道底层table的表结构及其之间的关系。
视图提供了⼀个统⼀访问数据的接⼝。
⼆、为什么要使⽤视图(View)从上⾯的图中,我们不难发现,使⽤视图将会得到如下好处:视图隐藏了底层的表结构,简化了数据访问操作因为隐藏了底层的表结构,所以⼤⼤加强了安全性,⽤户只能看到视图提供的数据使⽤视图,⽅便了权限管理,让⽤户对视图有权限⽽不是对底层表有权限进⼀步加强了安全性视图提供了⼀个⽤户访问的接⼝,当底层表改变后,改变视图的语句来进⾏适应,使已经建⽴在这个视图上客户端程序不受影响三、视图(View)的分类视图在SQL中可以分为三类1. 普通视图(Regular View)2. 索引视图(Indexed View)3. 分割视图(Partitioned View)下⾯从这⼏种视图类型来谈视图。
1)普通视图(Regular View)普通视图由⼀个Select语句所定义,视图仅仅包含其定义和被引⽤表的metadata.并不实际存储数据。
MSDN中创建视图的模版如下:CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ][ WITH <view_attribute> [ ,...n ] ]AS select_statement[ WITH CHECK OPTION ] [ ; ]<view_attribute> ::={[ ENCRYPTION ][ SCHEMABINDING ][ VIEW_METADATA ] }参数还是⽐较少的,现在解释⼀下上⾯的参数: ENCRYPTION:视图是加密的,如果选上这个选项,则⽆法修改.创建视图的时候需要将脚本保存,否则再也不能修改了 SCHEMABINDING:和底层引⽤到的表进⾏定义绑定。
视图的原理
视图是数据库中虚拟表的概念,它是通过查询语句动态生成的结果集。
视图的原理是基于数据库中的表和查询语句的关系。
在数据库中,视图并不实际存储数据,而是根据查询语句的条件从底层的表中提取所需的数据。
视图通过查询语句中的SELECT语句来定义,根据查询语句中的条件对表中的数据进行过滤、排序等操作,然后将结果展示给用户。
视图的原理是通过存储查询语句的定义以及底层表中的数据结构和数据来实现。
当创建视图时,查询语句的定义会被存储在数据库中,而不会运行查询语句。
当用户对视图执行查询操作时,数据库会根据存储的查询语句定义,从底层表中提取所需的数据,并将结果返回给用户。
这使得用户可以通过视图来方便地访问底层表中的数据,而无需了解底层表的结构和具体查询语句的细节。
视图的原理是基于数据库的查询优化技术来实现的。
数据库可以根据视图的定义和查询语句的条件,选择合适的访问路径和查询算法来提高查询性能。
数据库还可以使用缓存等技术来优化视图的访问速度,使得用户在查询视图时可以得到快速的响应。
总之,视图的原理是通过存储查询语句的定义和底层表中的数据结构和数据来实现的。
视图提供了一种方便的方式来访问和操作数据库中的数据,使得用户可以根据自己的需求定义查询语句,并在需要时通过视图来获取所需的数据。
视图的底层原理视图是数据库中的一种虚拟表,它是一个查询过程的结果集,可以简化复杂的查询操作,提高查询的效率。
在理解视图的底层原理时,我们可以从以下几个方面进行探讨:1. 视图的定义和使用:视图是由一个或多个表的数据衍生出来的虚拟表,通过在原始表上应用查询语句,可以创建视图并将其作为一个新的表来使用。
在创建视图时,可以定义视图的列名、列类型以及列属性。
使用视图时,可以像使用普通表一样进行查询、插入、更新和删除操作。
2. 视图的存储与管理:视图的定义和存储是分开的,视图的定义存储在数据库的数据字典中,而实际的数据存储在原始表中。
视图的查询结果只在使用时才会被计算得到,而不是事先存储在数据库中。
每当使用视图时,数据库系统会根据视图的定义和原始表的数据进行计算并返回结果。
3. 视图的查询优化:视图的底层原理是通过对原始表的查询语句进行优化以提高查询效率。
数据库系统在处理视图查询时,会将视图的定义转换为对原始表的查询操作。
这种转换过程可以基于查询重写、条件推断和列剪裁等技术。
- 查询重写:将对视图的查询转换为对原始表的查询,以简化查询过程。
例如,通过将嵌套查询转换为内连接,可以减少查询的复杂性。
- 条件推断:根据查询条件和视图的定义,推断出额外的条件,以减少查询的数据量。
例如,如果视图定义了某个列的取值范围,可以将其作为查询条件进行优化。
- 列剪裁:根据查询结果中所需的列,只查询原始表中相关的列,以减少数据的读取和传输。
例如,如果视图定义了某个列的查询条件,可以只查询该列的数据而不必检索其他列的数据。
4. 视图的更新和维护:视图可以像普通表一样进行插入、更新和删除操作,但有一些限制。
对于某些视图,由于其查询的原始表不唯一,可能无法直接对视图进行更新操作。
此外,如果视图定义中包含了聚合函数、DISTINCT关键字或GROUP BY子句,通常也无法对视图进行直接更新。
当对视图进行更新操作时,数据库系统会自动将这些操作转换为对原始表的更新操作。
数据库原理及应用课程计算机系09级本科班级第10 讲第3章SQL语言3.5数据更新(学生讲)3.6 视图视图的特点:1、虚表,是从一个或几个基本表(或视图)导出的表2、只存放视图的定义,不会出现数据冗余3、基表中的数据发生变化,从视图中查询出的数据也随之改变基于视图的操作:查询、删除、受限更新、定义基于该视图的新视图一、定义视图1. 建立视图语句格式: CREATE VIEW <视图名> [(<列名> [,<列名>]…)]AS <子查询>[WITH CHECK OPTION];说明:●DBMS执行CREATE VIEW语句时只是把视图的定义存入数据字典,并不执行其中的SELECT语句。
在对视图查询时,按视图的定义从基本表中将数据查出。
●组成视图的属性列名:全部省略或全部指定省略:由子查询中SELECT目标列中的诸字段组成明确指定视图的所有列名:(1) 某个目标列是集函数或列表达式(2) 目标列为 *(3) 多表连接时选出了几个同名列作为视图的字段(4) 需要在视图中为某个列启用新的更合适的名字2.视图的各种形式1)行列子集视图[例1] 建立信息系学生的视图。
CREATE VIEW IS_StudentASSELECT Sno,Sname,SageFROM Student WHERE Sdept= 'IS';特点:从单个基本表导出、只是去掉了基本表的某些行和某些列、保留了码2)有WITH CHECK OPTION选项的视图透过视图进行增删改操作时,不得破坏视图定义中的谓词条件(即子查询中的条件表达式)[例2] 建立信息系学生的视图,并要求透过该视图进行更新操作只涉及信息系学生。
CREATE VIEW IS_StudentASSELECT Sno,Sname,SageFROM Student WHERE Sdept= 'IS' WITH CHECK OPTION;注:对IS_Student视图的更新操作时,DBMS自动加上Sdept= 'IS'的条件3)基于多个基表的视图[例3] 建立信息系选修了1号课程的学生视图。
视图的原理视图(View)是数据库中的一个虚拟表,它是一个基于已经存在的表或其他视图产生的表,具有和表相同的结构。
视图可以简化复杂的查询操作,提高数据访问的效率,并且可以通过安全性授权来限制对某些数据的访问。
视图的原理主要包括以下几个方面:1. 视图的定义:视图通过SELECT语句定义,SELECT语句中包含了从一个或多个表中选择的列、过滤条件和排序规则。
视图可以像表一样具有列、行和索引等属性。
2. 视图的存储:视图本身并不存储任何数据,而是通过查询时动态生成所需的数据。
当查询视图时,数据库管理系统会根据视图的定义查询基础表,并根据查询结果生成临时表,然后返回给用户。
3. 视图的使用:视图可以像表一样被查询和修改。
用户可以通过SELECT语句查询视图的数据行,也可以通过INSERT、UPDATE和DELETE语句对视图进行插入、更新和删除操作。
这些操作会被转化为对基础表的操作,在操作完成后再生成新的视图结果。
4. 视图的优化:视图可以对复杂的查询操作进行封装,简化用户的查询过程。
数据库管理系统可以根据视图的定义进行优化,提高查询的效率。
例如,数据库管理系统可以通过查询计划的优化,选择最优的查询策略,减少查询的执行时间。
5. 视图的安全性:视图可以通过授予权限来限制用户对数据的访问。
用户只能访问其具有权限的视图,而不能直接访问底层的基础表。
这样可以保护数据的机密性和完整性,防止数据被未经授权的用户访问或修改。
视图在实际应用中有着广泛的应用场景:1. 简化复杂查询:对于复杂的查询操作,通过创建视图可以将多个表的连接、查询条件和排序规则封装在一起,简化用户的查询过程,提高查询的效率。
2. 数据安全性:通过授权视图的方式,可以限制用户对敏感数据的访问。
用户只能通过视图访问所需的数据,并且不能直接访问底层的基础表,保护了数据的机密性和完整性。
3. 数据层次化管理:通过创建不同层次的视图,可以对用户隐藏一部分数据,只暴露给用户需要的数据。
为什么要使用视图?什么是视图?视图(View)是数据库中的一个虚拟表,它是基于一个或多个实际表(或其他视图)的查询结果构建的,具有特定的查询和显示需求。
视图不存储实际的数据,而是提供了对底层数据的一种抽象和可重用的逻辑表示。
以下是一些使用视图的主要原因和视图的定义特点:为什么使用视图?简化复杂查询:视图可以将复杂的查询逻辑封装起来,使用户只需关注高层次的逻辑,而不必直接处理复杂的SQL语句。
隐藏表结构:视图可以用于隐藏底层表的具体结构,只向用户暴露需要的数据,从而提高数据的安全性和保护隐私。
简化权限管理:视图可以通过授予用户对视图的访问权限,而不是直接对底层表进行权限控制,简化了用户权限管理的过程。
提高数据独立性:当底层表的结构发生变化时,只需要调整视图的定义,而不会影响使用视图的应用程序或用户。
重用查询逻辑:可以将常用的查询逻辑抽象为视图,以便在多个查询中重用,提高代码的可维护性和重用性。
什么是视图?在SQL中,定义视图的语法如下:sqlCopy codeCREATE VIEW view_name ASSELECT column1, column2, ...FROM table1WHERE condition;其中,view_name 是视图的名称,SELECT语句定义了视图的查询逻辑,可以包含多个表的连接、过滤条件等。
例如,以下是一个简单的视图定义:sqlCopy codeCREATE VIEW employee_view ASSELECT employee_id, first_name, last_name, department_nameFROM employeesJOIN departments ON employees.department_id = departments.department_id;这个视图将employees表和departments表连接起来,提供了包含员工ID、姓名和部门名称的逻辑视图。
数据库视图的原理
数据库视图是数据库中的一个虚拟表,它是根据查询语句生成的结果集,可以像普通表一样使用。
它是基于某个或多个基本表的查询结果的逻辑表示。
视图的原理是通过存储查询语句来定义视图,查询语句可以是简单的SELECT语句或者复杂的JOIN、GROUP BY、WHERE等组合。
当对视图进行查询时,系统将解析视图中存储的查询语句,并生成一个临时的结果集返回给用户。
由于视图是基于基本表的查询结果,所以它具有以下特点:1. 视图中的数据是实时的,即每次查询视图都会重新计算结果集。
2. 视图可以隐藏基本表的结构,只返回用户所需的数据,并且可以对结果进行格式化、过滤和列名别名等操作。
3. 视图可以简化查询操作,尤其是对于复杂的查询语句,可以将其封装成一个视图,使得查询变得更加简洁。
4. 视图可以提供安全性,通过授权权限,可以限制用户对视图中的数据的访问范围,保护基本表中的敏感信息。
需要注意的是,由于视图是基于查询语句生成的结果集,所以它并不存储实际的数据,而是通过查询基本表来获取数据。
因此,当对视图进行查询时,系统会自动将查询转化为基本表的查询,并返回结果集给用户。
同时,视图也可以被其他视图所引用,形成视图的层级结构。
常见数据库对象(视图、索引、触发器、事务)⼀、视图1.1 视图的定义 视图是指计算机数据库中的视图,是⼀个虚拟表,其内容由查询结果来定义。
同真实的表⼀样,视图包含⼀系列带有名称的⾏和列数据。
但是,视图并不在数据库中以存储的数据值集形式存在。
⾏和列数据来⾃由定义视图的查询所引⽤的表,并且在引⽤视图时动态⽣成。
如果基表中的数据发⽣变化,则从视图中查询出的数据也随之变化。
1.2 视图的优点(1)定制⽤户数据 每个组织都有不同⾓⾊的⼯作⼈员,以销售公司为例,采购⼈员需要⼀些与采购有关的数据,⽽与采购⽆关的数据,对采购⼈员没有任何意义。
可以根据这⼀实际情况,专门为采购⼈员创建⼀个视图,以后采购⼈员在查询数据时,只需执⾏“select * from 采购视图”就可以了。
(2)简化数据操作 在使⽤查询时,很多时候需要使⽤聚合函数,同时还要显⽰其他字段的信息,可能还会关联到其他表,这时写的SQL语句会很长,如果这个多做频繁发⽣的话,就可以通过创建视图,简化数据来查询。
(3)细粒化的安全机制 因为视图是虚拟的,物理上是不存在的,它只是存储了数据的集合。
因此,可以将基表中重要的字段信息不通过视图提供给⽤户。
视图是动态的数据的集合,数据是随着基表的更新⽽更新的。
同时,⽤户不可以随意地更改和删除视图,以保证数据的安全性。
(4)合并分离的数据 随着社会的发展,公司的业务量不断地扩⼤。
为了管理⽅便,对于设有很多分公司的⼤公司,需要统⼀表的结构,从⽽定期查看各个分公司的业务情况。
使⽤union关键字,可以将各分公司的数据合并为⼀个视图,这样既⽅便⼜⾼效。
1.3 视图的创建和使⽤语法: create view view_name as select column_name(n) from table_name(n) where condition说明: view_name:视图名 column_name(n):视图中的字段列表,可以来源于多个表 table_name(n):表名,可以来源于多个表 condition:条件表达式,如果是多个表,则该表达式还包含标的连接条件⼆、索引2.1 索引的基本知识 2.1.1 理解索引 2.1.2 索引⼯作的原理 2.1.3 索引的作⽤ 2.1.4 索引的优缺点 优点: (1)⼤⼤加快了数据的检索速度。
数据库--视图的基本概念以及作⽤转⾃:视图(⼦查询):是从⼀个或多个表导出的虚拟的表,其内容由查询定义。
具有普通表的结构,但是不实现数据存储。
对视图的修改:单表视图⼀般⽤于查询和修改,会改变基本表的数据,多表视图⼀般⽤于查询,不会改变基本表的数据。
[sql]1. --创建视图--2. create or replace view v_student as select * from student;3. --从视图中检索数据--4. select * from v_student;5. --删除视图--6. drop view v_student;作⽤:①简化了操作,把经常使⽤的数据定义为视图。
我们在使⽤查询时,在很多时候我们要使⽤聚合函数,同时还要显⽰其它字段的信息,可能还会需要关联到其它表,这时写的语句可能会很长,如果这个动作频繁发⽣的话,我们可以创建视图,这以后,我们只需要select * from view就可以啦,这样很⽅便。
②安全性,⽤户只能查询和修改能看到的数据。
因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以将基表中重要的字段信息,可以不通过视图给⽤户,视图是动态的数据的集合,数据是随着基表的更新⽽更新。
同时,⽤户对视图不可以随意的更改和删除,可以保证数据的安全性。
③逻辑上的独⽴性,屏蔽了真实表的结构带来的影响。
视图可以使应⽤程序和数据库表在⼀定程度上独⽴。
如果没有视图,应⽤⼀定是建⽴在表上的。
有了视图之后,程序可以建⽴在视图之上,从⽽程序与数据库表被视图分割开来。
缺点:①性能差数据库必须把视图查询转化成对基本表的查询,如果这个视图是由⼀个复杂的多表查询所定义,那么,即使是视图的⼀个简单查询,数据库也要把它变成⼀个复杂的结合体,需要花费⼀定的时间。
②修改限制当⽤户试图修改视图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的视图来说,这是很⽅便的,但是,对于⽐较复杂的试图,可能是不可修改的。
数据库原理及应用课程计算机系09级本科班级第10讲章节名称第3章关系数据库标准语言SQL3.5数据更新3.6视图第4章数据库的安全性4.1数据为安全性概述教学目的掌握数据更新语句。
(Grasp Data Modification Statements)掌握视图的定义、查询及更新。
(Grasp the Definition、Query and Modification of View)并要灵活应用理解数据库安全性的含义。
(Comprehend the meanings of Database Security)了解TDI/TCSEC可信计算机系统评测标准。
(Know the trusted Computer System Evaluation Criteria of TDI/TCSEC)教学内容1.数据更新(Updata Insert Delete)2.视图的定义、视图的更新、视图的查询3.数据库安全性概述教学重点数据更新(Updata Insert Delete)视图的定义、查询及更新。
(Definition、Query and Modification of View)理解数据库安全性教学难点视图的概念及作用(Concepts and Functions of View)存取控制、视图机制。
(Access Control、View Mechanism)专业术语Table View select作业3、4、5教学方法启发式教学法+实例对比法教学后记第3章SQL语言3.5数据更新(学生讲)3.6视图视图的特点:1、虚表,是从一个或几个基本表(或视图)导出的表2、只存放视图的定义,不会出现数据冗余3、基表中的数据发生变化,从视图中查询出的数据也随之改变基于视图的操作:查询、删除、受限更新、定义基于该视图的新视图一、定义视图1.建立视图语句格式:CREATE VIEW<视图名>[(<列名>[,<列名>]…)]AS<子查询>[WITH CHECK OPTION];说明:●DBMS执行CREATE VIEW语句时只是把视图的定义存入数据字典,并不执行其中的SELECT语句。
在对视图查询时,按视图的定义从基本表中将数据查出。
●组成视图的属性列名:全部省略或全部指定省略:由子查询中SELECT目标列中的诸字段组成明确指定视图的所有列名:(1)某个目标列是集函数或列表达式(2)目标列为*(3)多表连接时选出了几个同名列作为视图的字段(4)需要在视图中为某个列启用新的更合适的名字2.视图的各种形式1)行列子集视图[例1]建立信息系学生的视图。
CREATE VIEW IS_StudentASSELECT Sno,Sname,SageFROM Student WHERE Sdept='IS';特点:从单个基本表导出、只是去掉了基本表的某些行和某些列、保留了码2)有WITH CHECK OPTION选项的视图透过视图进行增删改操作时,不得破坏视图定义中的谓词条件(即子查询中的条件表达式)[例2]建立信息系学生的视图,并要求透过该视图进行更新操作只涉及信息系学生。
CREATE VIEW IS_StudentASSELECT Sno,Sname,SageFROM Student WHERE Sdept='IS'WITH CHECK OPTION;注:对IS_Student视图的更新操作时,DBMS自动加上Sdept='IS'的条件3)基于多个基表的视图[例3]建立信息系选修了1号课程的学生视图。
CREATE VIEW IS_S1(Sno,Sname,Grade)ASSELECT Student.Sno,Sname,GradeFROM Student,SCWHERE Sdept='IS'ANDStudent.Sno=SC.Sno ANDo='1';4)基于视图的视图[例4]建立信息系选修了1号课程且成绩在90分以上的学生的视图。
CREATE VIEW IS_S2ASSELECT Sno,Sname,GradeFROM IS_S1WHERE Grade>=90;5)带表达式的视图[例5]定义一个反映学生出生年份的视图。
CREATE VIEW BT_S(Sno,Sname,Sbirth)ASSELECT Sno,Sname,2005-SageFROM Student设置一些派生属性列,也称为虚拟列--Sbirth,带表达式的视图必须明确定义组成视图的各个属性列名。
6)建立分组视图[例6]将学生的学号及他的平均成绩定义为一个视图CREAT VIEW S_G(Sno,Gavg)ASSELECT Sno,AVG(Grade)FROM SCGROUP BY Sno;注:一类不易扩充的视图:以SELECT*方式创建的视图可扩充性差,应尽可能避免[例7]将Student表中所有女生记录定义为一个视图CREATE VIEW F_Student1(stdnum,name,sex,age,dept)AS SELECT*FROM StudentWHERE Ssex='女';缺点:修改基表Student的结构后,Student表与F_Student1视图的映象关系被破坏,导致该第3章SQL语言视图不能正确工作。
CREATE VIEW F_Student2(stdnum,name,sex,age,dept)AS SELECT Sno,Sname,Ssex,Sage,SdeptFROM StudentWHERE Ssex='女';为基表Student增加属性列不会破坏Student表与F_Student2视图的映象关系。
3.删除视图DROP VIEW<视图名>;-----从数据字典中删除指定的视图定义说明:由该视图导出的其他视图定义仍在数据字典中,但已不能使用,必须显式删除。
删除基表时,由该基表导出的所有视图定义都必须显式删除[例8]删除视图IS_S1DROP VIEW IS_S1;二、查询视图从用户角度:查询视图与查询基本表相同DBMS实现视图查询的方法:视图消解法(View Resolution)――进行有效性检查,检查查询的表、视图等是否存在。
如果存在,则从数据字典中取出视图的定义把视图定义中的子查询与用户的查询结合起来,转换成等价的对基本表的查询执行修正后的查询。
[例1]在信息系学生的视图中找出年龄小于20岁的学生。
SELECT Sno,SageFROM IS_StudentWHERE Sage<20;用视图消解法转换后的查询语句为:SELECT Sno,SageFROM StudentWHERE Sdept='IS'AND Sage<20;[例2]查询信息系选修了1号课程的学生SELECT Sno,SnameFROM IS_Student,SCWHERE IS_Student.Sno=SC.Sno AND o='1';注:视图消解法的局限有些情况下,视图消解法不能生成正确查询。
采用视图消解法的DBMS会限制这类查询。
[例3]在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩S_G视图定义:CREATE VIEW S_G(Sno,Gavg) ASSELECT Sno,AVG(Grade) FROM SCGROUP BY Sno;SELECT*FROM S_G WHERE Gavg>=90;查询转换错误:SELECT Sno ,AVG(Grade)FROM SCWHERE AVG(Grade)>=90GROUP BY Sno ;指定WITH CHECK OPTION 子句:DBMS 在更新视图时会进行检查,防止用户通过视图对不属于视图范围内的基本表数据进行更新。
UPDATE IS_Student SET Sname='刘辰'WHERE Sno='95002';[例2]向信息系学生视图IS_S 中插入一个新的学生记录:95029,赵新,20岁INSERTINTO IS_StudentVALUES(‘95029’,‘赵新’,20);[例3]删除视图CS_S 中学号为95029的记录DELETE FROM IS_Student WHERE Sno='95029';注:更新视图的限制一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新例:视图S_G 为不可更新视图。
CREATE VIEW S_G (Sno ,Gavg)ASSELECT Sno ,AVG(Grade)FROM SCGROUP BY Sno ;对于如下更新语句:UPDATE S_G //不能将其转换成对基本表SC 的更新SET Gavg=90WHERE Sno='95001';正确:SELECT Sno,AVG(Grade)FROM SC GROUP BY Sno HAVING AVG(Grade)>=90;转换后的语句:UPDATE Student SET Sname='刘辰'WHERE Sno='95002'AND Sdept='IS';转换为对基本表的更新:INSERT INTO Student(Sno,Sname,Sage,Sdept)VALUES('95029','赵新',20,'IS');转换为对基本表的更新:DELETE FROM Student WHERE Sno='95029'AND Sdept='IS';第3章SQL语言视图的作用:1.视图能够简化用户的操作当视图中数据不是直接来自基本表时,定义视图能够简化用户的操作比如:基于多张表连接形成的视图、基于复杂嵌套查询的视图、含导出属性的视图等2.视图使用户能以多种角度看待同一数据视图机制能使不同用户以不同方式看待同一数据,适应数据库共享的需要3.视图对重构数据库提供了一定程度的逻辑独立性例:数据库逻辑结构发生改变学生关系Student(Sno,Sname,Ssex,Sage,Sdept)“垂直”地分成两个基本表:SX(Sno,Sname,Sage)SY(Sno,Ssex,Sdept)通过建立一个视图Student:CREATE VIEW Student(Sno,Sname,Ssex,Sage,Sdept)ASSELECT SX.Sno,SX.Sname,SY.Ssex,SX.Sage,SY.SdeptFROM SX,SYWHERE SX.Sno=SY.Sno;使用户的外模式保持不变,从而对原Student表的查询程序不必修改4.视图能够对机密数据提供安全保护对不同用户定义不同视图,使每个用户只能看到他有权看到的数据通过WITH CHECK OPTION对关键数据定义操作时间限制第四章数据库安全性4.1数据库安全性概述一、问题的提出:数据库的一大特点是数据可以共享,但数据共享必然带来数据库的安全性问题数据库系统中的数据共享不能是无条件的共享例:军事秘密、国家机密、新产品实验数据、市场需求分析、市场营销策略、销售计划、客户档案、医疗档案、银行储蓄数据数据库中数据的共享是在DBMS统一的严格的控制之下的共享,即只允许有合法使用权限的用户访问允许他存取的数据·数据库系统的安全保护措施是否有效是数据库系统主要的性能指标之一·什么是数据库的安全性:数据库的安全性是指保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏。