触发器与存储过程的区别
2015-07-20 15:18
330 查看
看完牛腩前18集,就发现用存储过程和触发器真的很棒棒哒!那么到底什么时候用存储过程,什么时候用触发器呢?
【我的理解】
SQL语句: 一句SQL语句就是一个命令,而一般来说一个命令只执行一件事。
存储过程: 里面可以有多个SQL语句,用事物可以保证多句语句必须都执行成
功,这个存储过程才执行。
触发器:是在对表进行插入、更新或删除操作时自动执行的存储过程,触发器通常用于强制业务规则。触发器还是一个特殊的事务单元,当出现错误时,可以执行ROLLBACK TRANSACTION回滚撤销操作。
【站在巨人的肩膀上】
触发器原理:
触发器与存储过程可以说是非常相似,可以说是一种变种的存储过程,触发器和存储过程一样都是SQL语句集,通常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性和一致性。由于用户不能绕过触发器,所以可以用它来强制实施复杂的业务规则,以确保数据的完整性。触发器不同于存储过程,触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,SQLSERVER就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则。
触发器的作用:
触发器的主要作用是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。它能够对数据库中的相关表进行级联修改,强制比CHECK约束更复杂的数据完整性,并自定义操作消息,维护非规范化数据以及比较数据修改前后的状态。与CHECK约束不同,触发器可以引用其它表中的列。在下列情况下使用触发器实现复杂的引用完整性;强制数据间的完整性。创建多行触发器,当插入,更新、删除多行数据时,必须编写一个处理多行数据的触发器。执行级联更新或级联删除这样的动作。级联修改数据库中所有相关表。撤销或者回滚违反引用完整性的操作,防止非法修改数据。
触发器与存储过程的区别:
触发器与存储过程的主要区别在于触发器的运行方式。存储过程必须有用户、应用程序或者触发器来显示的调用并执行,而触发器是当特定时间出现的时候,自动执行或者激活的,与连接用数据库中的用户、或者应用程序无关。当一行被插入、更新或者删除时触发器才执行,同时还取决于触发器是怎样创建的,当UPDATE发生时使用一个更新触发器,当INSERT发生时使用一个插入触发器,当DELETE发生时使用一个删除触发器。
【我的理解】
SQL语句: 一句SQL语句就是一个命令,而一般来说一个命令只执行一件事。
存储过程: 里面可以有多个SQL语句,用事物可以保证多句语句必须都执行成
功,这个存储过程才执行。
触发器:是在对表进行插入、更新或删除操作时自动执行的存储过程,触发器通常用于强制业务规则。触发器还是一个特殊的事务单元,当出现错误时,可以执行ROLLBACK TRANSACTION回滚撤销操作。
【站在巨人的肩膀上】
触发器原理:
触发器与存储过程可以说是非常相似,可以说是一种变种的存储过程,触发器和存储过程一样都是SQL语句集,通常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性和一致性。由于用户不能绕过触发器,所以可以用它来强制实施复杂的业务规则,以确保数据的完整性。触发器不同于存储过程,触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,SQLSERVER就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则。
触发器的作用:
触发器的主要作用是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。它能够对数据库中的相关表进行级联修改,强制比CHECK约束更复杂的数据完整性,并自定义操作消息,维护非规范化数据以及比较数据修改前后的状态。与CHECK约束不同,触发器可以引用其它表中的列。在下列情况下使用触发器实现复杂的引用完整性;强制数据间的完整性。创建多行触发器,当插入,更新、删除多行数据时,必须编写一个处理多行数据的触发器。执行级联更新或级联删除这样的动作。级联修改数据库中所有相关表。撤销或者回滚违反引用完整性的操作,防止非法修改数据。
触发器与存储过程的区别:
触发器与存储过程的主要区别在于触发器的运行方式。存储过程必须有用户、应用程序或者触发器来显示的调用并执行,而触发器是当特定时间出现的时候,自动执行或者激活的,与连接用数据库中的用户、或者应用程序无关。当一行被插入、更新或者删除时触发器才执行,同时还取决于触发器是怎样创建的,当UPDATE发生时使用一个更新触发器,当INSERT发生时使用一个插入触发器,当DELETE发生时使用一个删除触发器。
相关文章推荐
- LuaBridge
- 字符串大小写转换java
- Android MediaScanner总结
- 【shell脚本】ftp自动上传mysql备份文件
- 考勤补卡
- hash算法 (hashmap 实现原理)
- ACM_Dijkstra算法
- HDU 2041 超级楼梯
- Gradle DSL method not found: 'runProguard()' 问题的引发与解决
- 四元数介绍
- java.io.IOException: setDataSource failed.: status=0x80000000问题的解决
- Digging dp
- 敏捷开发中高质量 Java 代码开发实践
- 查看动态组成员/通讯组
- 敏捷开发中高质量 Java 代码开发实践
- JFinal使用笔记1-部署demo项目到本地tomcat
- 将Lua嵌入IOS程序
- 上传文件
- 【SpringMVC框架】springmvc入门程序-环境搭建
- Google Chrome浏览器插件“时空隧道”的使用