SQL 之 视图(一)

来源:互联网 发布:咖啡豆知乎 编辑:程序博客网 时间:2024/06/18 04:28

视图无非就是存储在数据库中并具有名字的SQL语句,或者说是以预定义的SQL查询的形式存在的数据表成分。视图本身不包含数据。

 

视图,又称虚表,区别于基表。视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。允许用户执行以下操作:

(1)以用户或者某些类型的用户感觉自然或者直观的方式来组织数据;

(2)限制对数据的访问,从而使得用户仅能看到或者修改(某些条件下)他们需要的数据;

(3)从多个表中汇总数据,以产生报表。视图也可以生成另一个视图。

 

对视图的常见疑惑:

(1)视图和基表的关系,视图与数据的关系

视图是从一个或者几个基本表中根据用户需要做成一个虚表:

a) 视图在存储时之存储视图的定义,而没有存储对应的数据。

b) 视图只在刚刚打开的一瞬间,通过定义从基表中搜集数据,并展现给用户

(2)视图VS查询

a) 视图和查询都是sql语句组成

b) 存储上的区别:视图存储为数据库设计的一部分,而查询不是

c) 更新限制的要求不一样:视图来自于表,所以通过视图可以间接对表进行更新;我们也可以通过update语句对表进行更新,但是对视图和查询更新限制是不同的,虽然通过视图可以间接更新表但是有很多限制。

d) 排序结果:通过sql语句可以对一个表进行排序,而视图不行。不能通过包含ORDER BY子句的sql语句创建视图。

(3)使用视图有什么好处?引入视图的目的?

a) 简单性,能分割数据,减少复杂性简化操作。看到的就是需要的

          首先试图能够简化那些特别复杂的SELECT语句。比如关联了6个表的SQL语句,在两个表或三个表之间创建视图可能会很有用。

         此外,可以通过selectwhere来定义视图从而可以分割数据基表中某些对于用户不关心的数据使用户把注意力集中到所关心的数据列进一步简化浏览数据工作。 b) 增加复用性:那些被经常使用的查询可以被定义为视图,从而使得用户可以直接引用预定义的视图,不必为以后的操作每次指定全部的条件。

c) 方便数据处理:1.正确地格式化数据,可以创建视图,把一些表中特定的列转换成用户想要的格式(常用在日期/时间格式的显示和使用),今后对这个表的所有引用都可以引用新的视图。2. 创建计算的列;3.重新命名列的名称;4.创建数据子集。等等

d) 安全性:通过视图授予用户特定权限,只能查询和修改(某些情况下)他们所能见到的数据。视图能像基本表一样授予或撤消访问许可权

          数据库中的其它数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上。

          使用视图加强数据的安全,一般通过使用视图共有三种途径加强数据的安全性 :
  i. 对不同用户授予不同的使用权
  ii. 通过使用select子句限制用户对某些底层基表的列的访问
  iii. 通过使用where子句限制用户对某些底层基表的行的访问, 对不同用户授予不同的权限

e) 逻辑数据独立性。视图可帮助用户屏蔽真实表结构变化带来的影响。即使以后基本表的内容的发生改变了也不会影响“视图定义”所得到的数据。

f) 视图可以间接对表进行更新,视图的更新就是表的更新。

0 0