存储过程和触发器的优点和缺点
2015-12-22 16:57
351 查看
首先介绍触发器
触发器是一种特殊类型的存储过程,当使用一种或者多种数据修改进行操作,在指定表中对数据进行修改时侯,会触发下面的函数,
触发器就会生效:update insiert delete 触发器可以查询其他表,可以包含很复杂的sql 语句,主要用于强制复杂的规则业务或者要求,
触发器有助于强制引用的完整性。以便于在进行删除,更新或者增加时候保留原来表中的已定义的关系,
然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。
触发器的优点介绍:
触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。
触发器可以通过数据库中的相关表进行层叠更改,
触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。
下面介绍存储过程:
存储过程是为了完成特定功能的一组sql语句集,经过编译后存储在数据库中,用户通过指定存储过程名字并且给出参数进行执行存储过程
存储过程是数据库的一个重要对象,一个良好的数据库应用程序都应该使用存储过程
存储过程的优点:
◆存储过程允许标准组件式编程
◆存储过程能够实现较快的执行速度
◆存储过程能够减少网络流量
◆存储过程可被作为一种安全机制来充分利用
使用 SQL Server 中的存储过程而不使用存储在客户计算机本地的 Transact-SQL 程序的优势有:
允许模块化程序设计。
只需创建过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。存储过程可由在数据库编程方面有专长的人员创建,并可独立于程序源代码而单独修改。
允许更快执行。
如果某操作需要大量 Transact-SQL 代码或需重复执行,存储过程将比 Transact-SQL 批代码的执行要快。将在创建存储过程时对其进行分析和优化,并可在首次执行该过程后使用该过程的内存中版本。每次运行 Transact-SQL 语句时,都要从客户端重复发送,并且在 SQL Server 每次执行这些语句时,都要对其进行编译和优化。
减少网络流量。
一个需要数百行 Transact-SQL 代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。
可作为安全机制使用。
即使对于没有直接执行存储过程中语句的权限的用户,也可授予他们执行该存储过程的权限
存储过程的分类
分为五类,系统存储过程,用户定义存储过程,临时存储过程,远程存储过程,扩展存储过程.
临时存储过程又分为本地临时存储过程,全局临时存储过程.
触发器是一种特殊类型的存储过程,当使用一种或者多种数据修改进行操作,在指定表中对数据进行修改时侯,会触发下面的函数,
触发器就会生效:update insiert delete 触发器可以查询其他表,可以包含很复杂的sql 语句,主要用于强制复杂的规则业务或者要求,
触发器有助于强制引用的完整性。以便于在进行删除,更新或者增加时候保留原来表中的已定义的关系,
然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。
触发器的优点介绍:
触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。
触发器可以通过数据库中的相关表进行层叠更改,
触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。
下面介绍存储过程:
存储过程是为了完成特定功能的一组sql语句集,经过编译后存储在数据库中,用户通过指定存储过程名字并且给出参数进行执行存储过程
存储过程是数据库的一个重要对象,一个良好的数据库应用程序都应该使用存储过程
存储过程的优点:
◆存储过程允许标准组件式编程
◆存储过程能够实现较快的执行速度
◆存储过程能够减少网络流量
◆存储过程可被作为一种安全机制来充分利用
使用 SQL Server 中的存储过程而不使用存储在客户计算机本地的 Transact-SQL 程序的优势有:
允许模块化程序设计。
只需创建过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。存储过程可由在数据库编程方面有专长的人员创建,并可独立于程序源代码而单独修改。
允许更快执行。
如果某操作需要大量 Transact-SQL 代码或需重复执行,存储过程将比 Transact-SQL 批代码的执行要快。将在创建存储过程时对其进行分析和优化,并可在首次执行该过程后使用该过程的内存中版本。每次运行 Transact-SQL 语句时,都要从客户端重复发送,并且在 SQL Server 每次执行这些语句时,都要对其进行编译和优化。
减少网络流量。
一个需要数百行 Transact-SQL 代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。
可作为安全机制使用。
即使对于没有直接执行存储过程中语句的权限的用户,也可授予他们执行该存储过程的权限
存储过程的分类
分为五类,系统存储过程,用户定义存储过程,临时存储过程,远程存储过程,扩展存储过程.
临时存储过程又分为本地临时存储过程,全局临时存储过程.
分类 | 说明 |
系统存储过程 | 存储在master中,以sp开头,调用时不必加库名,如果参数是保留字或者数据库对象,用单引号包围. |
用户定义存储过程 | 用户为完成一定的功能定义在数据库中存储过程. |
临时存储过程 | 本地临时:#开头,放在tempdb中,连接断开之后自动删除,本库使用. |
全局临时:##开头,放在tempdb中,连接断开后使用完之后自动删除,本连接的所有库可以使用.注意命名. | |
远程存储过程 | 位于远程服务器上的存储过程.通过分布式查询和execute执行. |
扩展存储过程 | 外部程序写的存储过程,xp开头,动态链接库形式存在,也放在master |
相关文章推荐
- EJB注解
- 各种乱码,编码问题设置方法整理(UTF-8)
- Java API —— Collections类
- chrome插件 postman 可以调用restful服务
- Linux常用命令英文缩写
- Android Call_02_InCallUI & Telecomm Service
- Action与func委托的区别有哪些
- 获取xml中backgound属性的statelistdrawable里drawable的方法
- Android版本编译,及使用fastboots烧android系统版本
- ModelAndView详解
- 求向量a在向量b上的投影
- git 入门第二节 本地和远程仓库链接
- No symbol "xxx" in current context
- AngularJS权威教程 第5章 控制器controller
- Java IO系列0 InputStream与OutputStream(字节流)
- atch: shared pool 优化探索
- 逻辑题不要只写结果,我一直觉得是要写过程。
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
- Android View not attached to window manager解决方案
- Cisco DHCP 分配固定IP地址