数据库视图的概念与作用
视图的概念
视图是由从数据库的表中选出来的数据组成的逻辑窗口,它与表不同的是,视图是一个虚表。
数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。
视图中的数据行和列都是来自于基本表,是在视图被引用时动态生成的,每次select from 某个视图的时候,都会先执行一遍视图中定义的查询。
使用视图可以集中、简化和制定用户的数据库显示,用户可以通过视图来访问数据,而不必直接去访问该视图的基本表。
视图的作用
优点
1. 数据安全性
对不同的用户定义不同的视图,使用户只能看到与自己有关的数据。通过使用视图,可以限制用户对底层表的直接访问,只允许他们访问视图中定义的数据子集。这提供了一种机制来实现数据安全性和访问控制。
2. 简化查询、代码复用
为复杂的查询建立一个视图,用户不必输入复杂的查询语句,只需针对此视图做简单的查询即可。那些被经常使用的查询可以被定义为视图,从而使用户不必为以后的操作每次都指定全部的条件。
场景举例:之前看到过有个表里一百多个字段,视图里面select了九十多个出来。用了视图后,当有地方要使用这九十多个字段的时候,可以直接select from 视图。不然每次要用的时候,都写select这九十多个字段,导致反复编写这种非常长的sql。所以这个场景中视图的作用就是为了方便写sql的时候复用,不然sql会写得过于冗长。
如果只是为了代码复用,可以使用一些框架,比如mybatis的include标签就行。
3. 逻辑独立性、数据抽象
视图可以使应用程序和数据库表在一定程度上独立。程序可以建立在视图之上,从而程序与数据库表被视图分割开来。当构成视图的基本表需要修改时,只需要修改视图定义的部分,而基于视图的查询不用改变。
视图可以为应用程序提供一种抽象层,隐藏底层表结构的细节。这样,即使底层表的结构发生变化,应用程序也可以继续使用视图而无需修改其代码。
缺点
性能:查询的时候得把视图的查询转化成对基本表的查询。
修改限制:当用户试图修改视图的某些行时,得把它转化为对基本表的某些行的修改,而且有些还是不能修改的。
创建视图的限制:定义视图的查询中不能含有ORDER BY\COMPURER\COMPUTER BY 子句和INTO关键字。如果视图中某一列是一个算术表达式、构造函数或者常数,而且视图中两个或者更多的不同列拥有一个相同的名字(这种情况通常是因为在视图的定义中有一个连接,而且这两个或者多个来自不同表的列拥有相同的名字),此时,用户需要为视图的每一列指定列的名称。