您当前位置:主页 > 资讯攻略 >
来源:未知
2019-10-10 15:27:15 浏览: 分类:资讯攻略

SQL Server视图管理中的四个限制条件

通过视图访问数据的优势非常明显。比如可以对数据保密,保证数据的逻辑独立性,简化查询操作等等。

但是,另一方面,sql server数据库中的视图也不是万能的,和表这个基本对象还是有很大区别的。使用视图时,有四个限制需要遵守。

条件1:视图数据的改变。

当用户更新视图中的数据时,他们实际上改变了相应数据表的数据。无论是更改视图中的数据,还是插入或删除视图中的数据,都是如此。但是,并不是所有的视图都可以更改。例如,以下视图不能在SQL Server数据库中直接更新,否则,系统将拒绝这种非法操作。

例如,在一个视图中,如果采用Group By子句,则汇总视图中的内容。用户无法更新此视图。这主要是因为查询结果被Group By子句汇总后,该记录的物理存储位置会在视图中丢失。这样,系统就找不到需要更新的记录。如果用户想改变视图中的数据,数据库管理员不能在视图中添加这个Group BY grouping语句。

如果不能使用Distinct关键字。该关键字的目的是删除重复记录。如果不添加该关键字,则视图查询中有250条记录。添加此关键字后,数据库将消除重复记录,只显示50条非重复记录。此时,如果用户想要更改其中一个数据,数据库将不知道需要更改哪条记录。因为视图中只有一条记录,所以基本表中可能有几十条记录。因此,如果在视图中使用Distinct关键字,则不能更改视图中的内容。

如果视图中有avg、MAX等函数,则不能更新。例如,在视图中,如果SUN函数用于汇总雇员的工资,则不能更新该表。这是数据库为确保数据一致性而添加的限制。

可见,虽然尝试起来方便安全,但还是代替不了手表的作用。当我们需要更新一些表中的数据时,我们经常通过操作这些表来做更多的事情。因为在直接更改视图内容时,需要遵守一些限制。实际中更多的处理规则是通过前台程序直接改变后台基本表。至于这些表中数据的安全性,就要靠前台应用来保护了。确保变更的准确性和合法性。

条件2:某些关键字不能用在定义视图的查询语句中。

众所周知,视图实际上是一组查询语句。换句话说,视图是封装查询语句的工具。在查询语句中,我们可以通过一些关键字来格式化显示的结果。例如,在我们的日常工作中,我们经常需要将一个表中的数据与另一个表中的数据合并。此时,数据库管理员可以使用Select Into语句来完成。首先从表中查询数据,然后将其添加到表中。

当经常需要类似的操作时,能否将其做成视图。您只需要在每次需要时运行这个视图,而不是每次都重写SQL代码。不幸的是,结果是否定的。在SQL Server数据库的视图中,不能有Into关键字。如果要实现类似的功能,只能通过函数或者程序来实现。

此外,与oracle数据库不同,在Microsoft SQLServer数据库中创建视图时还有一个额外的限制。也就是说,不能在创建视图的查询语句中使用order by sort语句。这是一个非常特殊的规则。一些Oracle数据库管理员在使用SQL Server数据库创建视图时经常犯类似的错误。他们不明白为什么在Oracle数据库里行得通,但在微软数据库里行不通。这恐怕是一个只有微软数据库产品的设计者才能回答的问题。总之,我们要记住,在SQLServer数据库中,创建视图时,查询语句不能包含Order By语句。

条件3:要给一些列起别名,列名要唯一。

在表关联查询中,当不同表的列名相同时,只需要添加表的前缀即可。不需要单独命名这些列。但是,在创建视图时会出现问题,数据库会提示“重复的列名& quot的错误提示警告用户存在重复的列名。有时,用户使用Select语句连接不同表中的多个列。如果它们具有相同的名称,该语句仍然可以执行。但是,如果将它复制到创建视图的窗口,视图创建将会失败。

查询语句和创建视图的查询语句之间有许多相似的区别。比如,有时候,我们可能会在查询语句中频繁使用一些算术表达式;或者在查询语句中使用函数等。在查询的时候,我们可以不给这个栏目“命名”。当数据库被查询时,它将被自动命名。但是,在创建视图时,数据库系统会给你一个问题。系统将提示您为该列设置别名。

从上面两个例子可以看出,虽然视图是SQL语句的封装,但是两者还是有区别的。用于创建视图的查询语句必须符合某些限制。例如,确保视图的每个列名的唯一性;如果自视图中的列是算术表达式、函数或常数,则命名它,依此类推。

条件四:对权威的双重制约。

为了保证基础表数据的安全性,视图的权限在创建时就被严格控制。

一方面,如果用户需要创建视图,他们必须拥有创建数据库视图的权限。这是创建视图时必须遵循的基本条件。例如,一些数据库管理员拥有创建和修改表的权限;但是,这并不意味着数据库管理员有权创建视图。相反,在大型数据库的设计中,往往会进行数据库管理员之间的分工。如果你建一个基本表,就建一个基本表;只有创建视图的权限负责创建视图。

其次,用户必须有权访问相应的表以及创建视图。例如,数据库管理员已经拥有创建视图的权限。此时,如果它需要创建员工工资信息的视图,可能不会成功。它还要求数据库管理员能够访问与工资信息相关的基本表。如果员工工资信息的查看涉及到五张表,数据库管理员需要所有者每张表的查询权限。否则,该视图的创建将以失败告终。

第三,查看权限的继承。如上例所示,该数据库管理员不是基础表的所有者。但是,在所有者的授权下,他可以访问这个基本表,并基于它构建一个视图。但是,数据库管理员是否将对这个基本表的访问权委托给了其他人?例如,他可以授权用户A访问员工出勤信息表单吗?答案是不一定。默认情况下,数据库管理员不能再授权给其他用户。但是,如果基础表的所有者将此权限授予数据库管理员,他可以重新授权用户。允许数据库管理员授权用户A执行相关操作。

可见,视图虽然灵活、安全、方便,但还是有很多限制。根据笔者的经验,在报告、表格等方面采用观点比较合理。因为它的SQL语句可以重用。在基本表的更新中,包括记录的改变、删除或插入,经常直接更新基本表。一些表约束可以通过触发器、规则等实现。甚至可以通过前台SQL语句直接实现约束。作为一个数据库管理员,你应该有这个能力来判断什么时候使用视图,什么时候直接调用基本表。

关键词:SQL Server、视图管理

优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。

本文链接:http://www.123down.cn/gonglue/227182.html

攻略资讯
安卓软件