`
Felix韩
  • 浏览: 16814 次
  • 性别: Icon_minigender_1
  • 来自: 江西
最近访客 更多访客>>
社区版块
存档分类
最新评论

正确理解SQL视图、存储过程和触发器

    博客分类:
  • SQL
阅读更多

一、视图是一种常用的数据库对象,将查询的结果以虚拟表形式存储在数据中,并不在数据中以存储数据集的形式存在。视图的结果和内容是建立在对表的查询基础之上的,和表一样,包括行和列,这些行、列数据都来源于所引用的表,并且是在引用视图过程中动态生成的。

视图中的内容是由查询定义来的,并且视图和查询都是通过SQL语句定义的,他们有着许多相同之处,但又很多不同之处。视图和查询的区别如下:

1. 存储:视图存储为数据库设计的一部分,查询则不是。视图可以禁止所有用户访问数据库中的基表,查询要求用户只能通过视图操作数据。这种方法可以包含用户和应用程序不受某些数据库修改的影响,同样也可以包含数据库表的安全性。

2. 排序:查询的结果都可以拍下,而是他只有包括TOP子句时才能进行排序。

3. 加密:视图可以加密,但查询不能加密。

视图是一个虚拟的数据表,可以是多个表的查询结果,视图的优点包括以下几个方面。

1.简化操作

视图可以是比较复杂的多表关联查询,每一次执行相同的查询时,只需要一条简单的查询视图语句就可以解决复杂查询的问题。视图简化了操作的复杂性,使初学者不必掌握复杂的查询语句,就可以实现多个数据表间的复杂查询工作。对一个视图的访问要比对多个表的访问容易得多,大大简化了用户的操作。

2.建立浅谈和后台缓冲

在数据库开发过程中,可以通过调用视图来实现查询功能。通过对视图的调用,在数据表结果更改时,只要视图的输出列不发生变化,就可以避免对应用程序的修改。大大提高了数据库的开发效率,同时降低了开发成本。

3.合并分割数据

通过视图可以对表中数据进行水平分割或垂直分割。用户而言对一个表或多个表中的数据列进行有选择的查看,简化数据结构;可以通过在食堂中使用WHERE子句水平分割数据,限制表中显示的数据。

4.提高安全性

视图可以作为一种安全机制。通过视图可以限定用户查看和修改的数据表和列,其他数据信息只能是有访问权限的用户才能查看和修改。例如,对于工资表中信息,一般用过只能看到表中的姓名、办公室、工作电话和部门等,只有复杂相关操作的人才有权限查看或修改。如果某一用户想要访问视图的结果集,必须被授予访问权限,视图所引用的表访问权限与视图权限的设置互不影响。在数据库开发设计时,不同级别用户共用一个数据库时应用得极其广泛。


二、存储过程也称为存储查询,是存储在数据库中预先定义的SQL语句。它可以将常用的或很复杂的工作预先用SQL语句写好,并用一个值得的名称存储起来。使用时,只需要调用该存储过程就可以自动完成命令。现在的程序员在代码中都不直接使用SQL字符串,而是利用创建和使用存储过程来代替。这样做的好处如下。

1.存储过程只在创建时进行编译,以后执行存储过程时都不需要重新编译;而SQL语句每执行一次都要编译一次,所以使用存储过程可以提供数据库执行速度。

2.当对数据库进行复杂操作时,可以将这些复杂操作利用存储过程封装起来与数据库提供的事务处理结合在一起使用。

3.存储过程的安全性高,可以设定只有魔鬼用户才具有对其指定存储过程的使用权。

4.存储过程可以将所有SQL语句代码集中存放于服务器,避免将.net代码和冗长的SQL语句混在一起,从而使.NET代码更容易维护。

5.在存储过程中可以使用输出参数,允许返回记录集或其他值。

6.存储过程可以重复使用,大大减少了数据库开发人员的工作量。

三、触发器是数据库服务器中发生事件时自动执行的特殊存储过程,它插入、删除或修改特表中的数据时触发执行。触发器通常可以强制执行一定的业务规则,以保持数据完整性、检查数据有效性、实现数据库管理任务和一些附加的功能。

在Sqlserver中一张表可以有多个触发器。用户可以根据INSERT、UPDATE或DELETE语句对触发器进行设置,也可以对一张表上的特别操作设置多个触发器。触发器可以包含复杂的T-SQL语句。触发器不能通过名称被直接调用,更不允许设置参数。

触发器的特点如下:

(1)触发器自动执行

 对表中的数据进行修改后,触发器立即被激活。

(2)可以调用存储过程

 为了实现复杂的数据库更新操作,触发器可以调用一个或多个存储过程,甚至可以通过调用外部过程(不是数据库管理系统本身)完成相应的操作。

(3)可以强化数据条件约束

触发器能够实现比CHECK约束更为复杂的数据完整性约束。在数据库中为了实现数据完整性约束,可以使用CHECK约束或触发器。CHECK约束不允许引用其他表中的例来完成检查工作,而触发器可以引用其他表中的列,更适合在大型数据库管理系统中用来约束数据的完整性。

(4)触发器可以禁止或回滚违反引用完整性的更改

触发器可以检测数据内的操作,从而取消数据库未经许可的更新操作,使数据库修改、更新操作更安全,数据库的运行也更稳定。

(5)级联、并行运行

触发器能够对数据库中的相关表实现级联更改。触发器是基于一个表创建的,但是可以针对多个表进行操作,实现数据库中相关表的级联更改。

(6)同表多触发器

一个表中可以同时存在3个不同操作的触发器(INSERT、UPDATE和DELETE)。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics