SQL Server数据库中的视图优点非常明显,但却不是万能的。在使用视图的时候,需要遵守四大限制条件。

经过视图来拜访数据,其长处是十分显着的。如可以起到数据保密、确保数据的逻辑独立性、简化查询操作等等。

SQL Server视图办理中需求恪守的四个约束条件  Server 视图管理 限制条件 第1张

可是,话说回来,SQL Server数据库中的视图并不是全能的,它跟表这个根本目标仍是有严重的差异。在运用视图的时分,需求恪守四大束缚。

束缚条件一:视图数据的更改

当用户更新视图中的数据时,其实更改的是其对应的数据表的数据。无论是对视图中的数据进行更改,仍是在视图中刺进或许删去数据,都是相似的道理。可是,不是一切视图都可以进行更改。如下面的这些视图,在SQL Server数据库中就不可以直接对其内容进行更新,不然,体系会回绝这种不合法的操作。

如在一个视图中,若选用Group By子句,对视图中的内容进行了汇总。则用户就不可以对这张视图进行更新。这首要是由于选用Group By子句对查询成果进行汇总在后,视图中就会丢掉这条纪录的物理存储方位。如此,体系就无法找到需求更新的纪录。若用户想要在视图中更改数据,则数据库管理员就不可以在视图中增加这个Group BY分组句子。

如不可以运用Distinct要害字。这个要害字的用处便是去除重复的纪录。如没有增加这个要害字的时分,视图查询出来的纪录有250条。增加了这个要害字后,数据库就会除掉重复的纪录,只显现不重复的50条纪录。此刻,若用户要改动其间一个数据,则数据库就不知道其究竟需求更改哪条纪录。由于视图中看起来只要一条纪录,而在根底表中可能对有的纪录有几十条。为此,若在视图中选用了Distinct要害字的话,就无法对视图中的内容进行更改。

假如在视图中有AVG、MAX等函数,则也不可以对其进行更新。如在一张视图中,其选用了SUN函数来汇总职工的薪酬时,此刻,就不可以对这张表进行更新。这是数据库为了确保数据一致性所增加的束缚条件。

可见,企图尽管便利、安全,可是,其依然不可以替代表的位置。当需求对一些表中的数据进行更新时,咱们往往更多的经过对表的操作来完结。由于对视图内容进行直接更改的话,需求恪守一些束缚条件。在实践工作中,更多的处理规矩是经过前台程序直接更改后台根底表。至于这些表中数据的安全性,则要依托前台应用程序来维护。确保更改的准确性、合法性。

束缚条件二:界说视图的查询句子中不可以运用某些要害字

咱们都知道,视图其实便是一组查询句子组成。或许说,视图是封装查询句子的一个东西。在查询句子中,咱们可以经过一些要害字来格式化显现的成果。如咱们在平常工作中,常常会需求把某张表中的数据跟别的一张表进行兼并。此刻,数据库管理员就可以运用Select Into句子来完结。先把数据从某个表中查询出来,然后再增加到某个表中。

当常常需求相似的操作时,咱们是否可以把它制作成一张视图。每次有需求的时分,只需求运转这个视图即可,而不必每次都进行从头书写SQL代码。不过惋惜的是,成果是否定的。在SQL Server数据库的视图中,是不可以带有Into要害字。假如要完成相似的功用,只要经过函数或许进程来完成。

别的,跟Oracle数据库不同的是,在微软的SQL Server数据库中创立视图的时分,还有一个额定的束缚。便是不可以在创立视图的查询句子中,运用order by排序句子。这是一个很特别的规矩。一些Oracle的数据库管理员,在运用SQL Server数据库创立视图的时分,常常会犯相似的过错。他们就搞不明白,为什么Oracle数据库中可行,可是在微软的数据库中则行不通呢?这恐怕只要微软数据库产品的规划者才可以答复的问题。总归咱们要记住的便是,在SQL Server数据库中,树立视图时,查询句子中不可以包含Order By句子。

束缚条件三:要对某些列取别号,并确保列名的仅有

在表相关查询的时分,当不同表的列名相一起,只需求加上表的前缀即可。不需求对列别的进行命名。可是,在创立视图时就会出现问题,数据库会提示 “duplicate column name”的过错提示,正告用户有重复的列名。有时分,用户运用Select句子衔接多个来自不同表的列,若具有相同的姓名,则这个句子依然可以履行。可是,若把它复制到创立视图的窗口,创立视图时,就会不成功。

查询句子跟创立视图的查询句子还有许多相似的差异。如有时分,咱们在查询句子中,可能会比较频频的选用一些算术表达式;或许在查询句子中运用函数等等。在查询的时分,咱们可以不给这个列“取名”。数据库在查询的时分,会主动给其命名。可是,在创立视图时,数据库体系就会给你出难题。体系会提示你为列取别号。

从以上两个比如中,咱们可以看出,尽管视图是对SQL句子的封装,可是,两者依然有差异。创立视图的查询句子必需求恪守必定的束缚。如要确保视图的各个列名的仅有;假如自阿视图中某一列是一个算术表达式、函数或许常数的时分,要给其取姓名,等等。

束缚条件四:权限上的两层束缚

为了确保根底表数据的安全性,在视图创立的时分,其权限操控比较严厉。

一方面,若用户需求创立视图,则必需求有数据库视图创立的权限。这是视图树立时有必要遵从的一个根本条件。如有些数据库管理员尽管具有表的创立、修正权限;可是,这并不表明这个数据库管理员就有树立视图的权限。恰恰相反,在大型数据库规划中,往往会对数据库管理员进行分工。树立根底表的就只管树立根底表;担任创立视图的就只要创立视图的权限。

其次,在具有创立视图权限的一起,用户还有必要具有拜访对应表的权限。如某个数据库管理员,已经有了创立视图的权限。此刻,若其需求创立一张职工薪酬信息的视图,还不必定会成功。这还要这个数据库管理员有美誉跟薪酬信息相关的根底表的拜访权限。如树立职工薪酬信息这张视图总共涉及到五张表,则这个数据库管理员就需求具有者每张表的查询权限。若没有的话,则树立这张视图就会以失利告终。

第三,便是视图权限的承继问题。如上面的比如中,这个数据库管理员不是根底表的一切者。可是经过一切者的授权,他就可以对这个根底表进行拜访,就可以以此为根底树立视图。可是,这个数据库管理员有没有把对这个根底表的拜访权限再授权给其他人呢?如他能否授权给A用户拜访职工考勤信息表呢?答案是不必定。默许情况下,数据库管理员不可以再对其他用户进行授权。可是,若根底表的一切者,把这个权力给了数据库管理员之后,则他就可以对用户进行从头授权。让数据库管理员可以给A用户进行授权,让其可以进行相关的操作。

可见,视图尽管灵敏,安全,便利,可是其依然有比较多的束缚条件。依据笔者的经历,一般在报表、表单等等工作上,选用视图会愈加的合理。由于其 SQL句子可以重复运用。而在根底表更新上,包含纪录的更改、删去或许刺进上,往往是直接对根底表进行更新。关于一些表的束缚,可以经过触发器、规矩等等来完成;乃至可以经过前台SQL句子直接完成束缚。作为数据库管理员,要有这个才能,可以判别在什么时分运用视图,什么时分直接调用根底表。

【修改引荐】

  1. 如安在SQL Server数据库中成批导入数据
  2. SQL Server查询进程的内存实践耗费
  3. SQL Server查询速度缓慢解决办法
转载请说明出处
知优网 » SQL Server视图办理中需求恪守的四个约束条件

发表评论

您需要后才能发表评论