下面是小编给大家带来浅谈触发器和存储过程,本文共8篇,一起来阅读吧,希望对您有所帮助。

篇1:浅谈触发器和存储过程
触发器: 基本表在被修改的时候通过事件触发而执行的存储过程。(被动)
作用是保证了由主键和外键所不能保证的参照完整性和数据完整行。
存储过程: 一种数据库对象,将负责不同功能的语句分类封装好,以便反复调用。(主动)
篇2:浅谈触发器和存储过程
触发器:
1:实现比约束更复杂的数据的完整性
2:返回自定义的错误信息
3:实现多张表的连级修改
存储过程:
1:语句封装,可多次调用,just like 面向对象
2:执行速度更快(存储过程第一次执行便被分析优化)
3:保证数据安全(系统管理员可对存储过程进行权限限制)
篇3:浅谈触发器和存储过程
1:触发器是一个被动的执行过程,更像是一个保护机制,当我的某个数据库的某条数据被修改的时候我预先写好的触发器就这样被触发了,然后他就会通过主外键约束来对其他表的数据进行合理修改以满足整个数据的完整性,
而存储过程却是一个十足的积极主动能手,主动把SQL语句分类封装,就像我们在机房收费的时候封装的方法,我写好了有类似的需求直接调用就可以了。
2:触发器和存储过程都是数据库这个层面上进行的操作和修改,可以说基本跟我们要实现的软件代码没半毛钱关系,这样也是符合分层思想的,而且有利于后期系统的维护和修改。如果哪个功能块需求变更我们可能只需要修改数据库里的存储过程或者触发器而不用打开大段的代码去修改SQL语句。
3:两者都从不同方面保护了数据,触发器可以保护数据的完整性,而存储过程则是通过权限管理维护数据的安全。
篇4:如何测试mysql触发器和存储过程
-03-03mysql 字符串函数收集比较全
-08-08MySQL 有输入输出参数的存储过程实例
-04-04MySQL查询优化:连接查询排序limit(join、order by、limit语句)介
2013-05-05基于mysql事务、视图、存储过程、触发器的应用分析
-03-03mysql 跨表查询、更新、删除示例
2010-11-11mysql的日期和时间函数
-11-11MySQL优化全攻略-相关数据库命令
-07-07you *might* want to use the less safe log_bin_trust_function
2013-11-11mysql获取字符串长度函数(CHAR_LENGTH)
2013-05-05MySQL笔记之修改数据的解决方法
篇5:如何测试mysql触发器和存储过程
最近更 新
mysql中IFNULL,IF,CASE的区别介绍
解决远程连接mysql很慢的方法(mysql_conn
MySQL 相关的环境变量
MySQL笔记之运算符使用详解
jdbc调用mysql存储过程实现代码
mysql执行时间为负数的原因分析
Mysql在debian系统中不能插入中文的终极解
关于mysql innodb count(*)速度慢的解决办
Last_Errno: 1062,Last_Error: Error Du
MySQL无法启动1067错误的又一种解决方法(
热 点 排 行
mysql安装图解 mysql图文安装教程
超详细mysql left join,right jo
Can''t connect to MySQL server
Mysql命令行导入sql数据
MYSQL 数据库导入导出命令
Mysql字符串截取函数SUBSTRING的
MySQL数据库备份与恢复方法
MySQL server has gone away 问题
windows下mysql忘记root密码的解
MySQL日期数据类型、时间类型使用
篇6:触发器与存储过程互调数据库
:)
--触发器如何调用存储过程
create trigger test on table
for insert
as
exec 存储过程名
go
--存储过程如何调用触发器
create proc test
as
update table set ...
insert table select ...
delete table ...
原文转自:www.ltesting.net
篇7:存储过程和触发器的取舍问题(优缺点分析)
存储过程和触发器的取舍问题(优缺点分析)
由于要给同学分享一些关于数据库中存储过程和触发器的知识,我想了想,这是很细节的技术,一般只要用了都会很快掌握其使用方法,经过这么多年,我一般在设计数据库的时候也都会或多或少的使用存储过程和触发器,原因很简单:良好的性能,业务也好实现。可是在做上次的项目的时候,由于业务很复杂,存储过程和触发器的数量均都达到上百之多,这是一件很恐怖的事情,尤其是在出了错调试维护的时候,就会想没有这些东西多好。下面我从经验角度梳理一下对存储过程和触发器的看法。
1、触发器是特殊的存储过程。
这句话在教科书中会经常出现,这就说明二者是有很大的联系的,我的一般理解就是触发器是一个隐藏的存储过程,因为它不需要参数,不需要显示调用,往往在你不知情的情况下已经做了很多操作。从这个角度来说,由于是隐藏的,无形中增加了系统的复杂性,非DBA人员理解起来数据库就会有困难,因为它不执行根本感觉不到它的存在。再有,涉及到复杂的逻辑的时候,触发器的嵌套是避免不了的,如果再涉及几个存储过程,再加上事务等等,很容易出现死锁现象,再调试的时候也会经常性的从一个触发器转到另外一个,级联关系的不断追溯,很容易使人头大。其实,从性能上,触发器并没有提升多少性能,只是从代码上来说,可能在coding的时候很容易实现业务,所以我的观点是:摒弃触发器!触发器的功能基本都可以用存储过程来实现。
2、存储过程优点很多,可以经常使用
可以封装数据逻辑和业务规则,以便用户可以仅通过开发人员和数据库管理员打算使用的方式访问数据和对象。
验证所有用户输入的参数化存储过程可用于阻止 SQL 注入攻击。 如果使用动态 SQL,请确保将命令参数化,并绝对不能将参数值直接包括在查询字符串中。
可禁止即席查询和数据修改。 这样将阻止用户恶意或无意中损坏数据或执行查询,以避免降低服务器或网络的性能。
可以在过程代码中处理错误,而无需将错误直接传递给客户端应用程序。 这样可防止返回错误消息,以避免其可能有助于探测攻击,
在服务器上记录错误并对其进行处理。
存储过程只能编写一次,可由很多应用程序访问。
客户端应用程序不需要知道有关基础数据结构的任何信息。 只要更改不影响参数列表或返回的数据类型,就可以更改存储过程代码,而无需在客户端应用程序中进行更改。
存储过程可通过将多个操作组合到一个过程调用中来减少网络通讯。
安全性好—可以访问执行存储过程而不必拥有直接操作基础表的权限
减少网络通信流—存储过程可以包含多条SQL语句,但只要用一条语句来执行该存储过程,从而减少了客户端应用程序对服务器的调用次数和长度
快速执行—存储过程在第一次执行时进行语法检查和编译,编译好的版本存储在高速缓存中,用于再次调用
保证一致性—如果用户只通过存储过程修改数据,则可以消除偶然修改带来的问题减少操作人员和编程人员的错误—由于传递信息少,因此执行复杂任务更容易,不易出现SQL错误
3、考虑移植性,存储过程的致命伤
如果一个系统过多的使用了存储过程,那系统的业务逻辑过于依赖数据库,这样就会给系统额外的增加一层数据库中的业务逻辑层,如果开发的时候用的sql server,后来发现数据量过大,需要提高性能移植到oracle或者mysql,这样就会很麻烦,相当于把存储过程重写一遍,这是不能忍受的。我们平时在做项目的时候,往往一个功能在客户端实现起来很费劲,在服务端很容易就可以实现,这样好多人就会选择在服务端做,却为以后留下隐患。在分析项目的需求的时候,一定要考虑性能问题,多久有可能会升级, 如果数据量很小,几十年用sql server都没问题,那就可以多用存储过程;但是数据量有可能会逐渐累积成千万条甚至更多,就不得不考虑系统的可移植性,这时候尽量不要用存储过程,全部代码控制。
4、存储过程的代码可复用性差。
面向对象的思维在存储过程这毫无用武之地,两个很相似的功能在也需要两个存储过程,因为他们是互相独立的,可以互相调用,但是不能继承等面向对象的操作,这也就增加了代码量。
综上:在一般的小系统(逻辑简单)中,存储过程和触发器可以多用,毕竟ms设计的,可以很大程度上提升性能;在复杂的系统中,建议不用触发器,少用存储过程。
篇8:存储过程入门
这一篇要总结的是存储过程,包括存储过程有哪几种,如何创建,以及最后如何调用存储过程,所以分为以下几个方面进行总结。
1,不带参数的存储过程
2,带输入参数的存储过程
3,带输入和输出参数的存储过程
4,带返回值的存储过程
不带参数的存储过程
例如,以下存储过程返回Employees表中所有职员的记录,
存储过程代码:
USE TSQLFundamentals2008;GOIF OBJECT_ID('usp_ProcDemoNoParam','P') IS NOT NULL DROP PROC usp_ProcDemoNoParam;GO-- 1,不带参数CREATE PROC usp_ProcDemoNoParamASBEGIN SELECT * FROM HR.Employees;ENDGO
调用代码:
USE TSQLFundamentals2008;GO-- 1,不带参数存储过程的调用EXEC usp_ProcDemoNoParam;
结果:
文档为doc格式