存储过程与触发器的区别
2016-03-09 10:45
288 查看
一、存储过程
是 SQL
语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。
存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。
可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点:
1.可以在单个存储过程中执行一系列 SQL 语句。
2.可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
3.存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快。
二、触发器
是一种特殊类型的存储过程,当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效:UPDATE、INSERT 或
DELETE。触发器可以查询其它表,而且可以包含复杂的 SQL
语句。它们主要用于强制复杂的业务规则或要求。例如,可以控制是否允许基于顾客的当前帐户状态插入定单。
触发器还有助于强制引用完整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。有关详细信息,请参见表关系。
触发器的优点如下:
1.触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。
2.触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id
列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在
titleauthor、sales 及 roysched 表中对各匹配行进行定位。
3.触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK
约束不同的是,触发器可以引用其它表中的列。例如,触发器可以回滚试图对价格低于 10 美元的书(存储在 titles
表中)应用折扣(存储在 discounts 表中)的更新。
简单来说:
1.存储过程是保存起来的可以接受和返回用户提供的参数的
Transact-SQL 语句的集合.
存储过程单独存在于数据库中,需要手工调用 。
2.触发器是一种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行。
允许为任何给定的
INSERT、UPDATE
或
DELETE 语句创建多个触发器。
触发器依赖于库中的某个表而存在,当表中的数据发生变化时,自动触发触发器工作。
是 SQL
语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。
存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。
可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点:
1.可以在单个存储过程中执行一系列 SQL 语句。
2.可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
3.存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快。
二、触发器
是一种特殊类型的存储过程,当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效:UPDATE、INSERT 或
DELETE。触发器可以查询其它表,而且可以包含复杂的 SQL
语句。它们主要用于强制复杂的业务规则或要求。例如,可以控制是否允许基于顾客的当前帐户状态插入定单。
触发器还有助于强制引用完整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。有关详细信息,请参见表关系。
触发器的优点如下:
1.触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。
2.触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id
列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在
titleauthor、sales 及 roysched 表中对各匹配行进行定位。
3.触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK
约束不同的是,触发器可以引用其它表中的列。例如,触发器可以回滚试图对价格低于 10 美元的书(存储在 titles
表中)应用折扣(存储在 discounts 表中)的更新。
简单来说:
1.存储过程是保存起来的可以接受和返回用户提供的参数的
Transact-SQL 语句的集合.
存储过程单独存在于数据库中,需要手工调用 。
2.触发器是一种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行。
允许为任何给定的
INSERT、UPDATE
或
DELETE 语句创建多个触发器。
触发器依赖于库中的某个表而存在,当表中的数据发生变化时,自动触发触发器工作。
相关文章推荐
- 【OpenStack】OpenStack系列1之OpenStack本地开发环境搭建&&向社区贡献代码
- tokuDB存储引擎的安装、配置、使用及注意事项
- 【BZOJ4299】Codechef FRBSUM
- asp.net中的Application概述
- lzg_ad: FBWF技术概述
- Linux下io磁盘调度策略及配置
- JMS入门(三)--Queue的使用
- JMS入门(四)--Topic的使用
- 批量修改文件的编码
- 怎么设置session无响应超时时间并且自动返回登陆页面
- 飞天平台安全相关
- c语言--指针
- 懈怠了
- unnable to create virtual device:server returned http status code 0
- window下用android-ndk-r9d编译.so文件之mutex in namespace 'std' does not name a type
- Js实现Map对象
- JVM - 内存溢出问题排查相关命令jcmd jmap
- 关于unity常见的面试题
- WebPack系列教程(四):安装
- 【零基础入门学习Python笔记002】用Python设计第一个游戏:课后测试集答案