浅谈存储过程和触发器

上一篇 / 下一篇  2012-05-14 09:59:24 / 个人分类:数据库

说到存储过程和触发器,其实在以前做机房收费系统的时候就接触到了。但是当时总感觉存储过程和触发器是比较高级的东西,这个系统不用这些东西也可 以。于是就一直没有好好研究这块知识。现在看牛腩新闻发布系统,再一次涉及到了这个东东,这才发现,存储过程和触发器并没有想象的那么高深莫测。也许有人 会说:那是你没有深入研究。是,我承认,但个人觉得目前我们还没有必要那么深入研究。我们要做的就是:用20%的努力,获得80%的知识。这样就基本上可 以满足我们日常的需求了。下面就宏观上说一下存储过程和触发器。51Testing软件测试网r{c1s5^m

  什么是存储过程呢?官方是这样定义的,存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

C'y-_i+|rm051Testing软件测试网k!b[dx2v.C ab

  1、创建存储过程语句如下:51Testing软件测试网e"|_8O l/sv(p iZ

|n MT\ ~D+q0createprocedure 存储过程名51Testing软件测试网|:\:T.ER c

s@6G bCL!}S0@[参数名] [类型],@[参数名][类型]

3G0A-|2f.n^G!d7B0

P \+P| Iqo6[G0as

'~)RX5`k0

:G/x rX~0@iQ0begin51Testing软件测试网%m(z9`OWP

W \#Gc0D u0    自定义的功能51Testing软件测试网)nU7~0\8~afP|

51Testing软件测试网:kH$?K$K3`

end

Uyc(v?)f|F y.}0
51Testing软件测试网M]t fc6VR4]2D}

  2、调用存储过程

X Eg9g/Qbe8AM:p0

&B?K2Q-[+A,j0  exec sp_name [参数名]51Testing软件测试网{(H(] _oL3jiG

9IkB3I,D?0  3、删除存储过程

+u/q-f9r8`Ts2pZx051Testing软件测试网y3D;K0bFCmNXB

  drop proceduresp_name51Testing软件测试网j@Ij+z)w

2fkYg4O/s,Q"]6WYd0  其实,说白了,存储过程就是一类特殊的函数,只要我们给它合适的参数就可以直接调用,跟调用API函数差不多,唯一不同的就是API函数大部分是别人写的,而存储过程我们一般都是自己写。

|U9C ag8I0

5lrB4U*^4R,|)rLd+b0  注意:不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程。

(oyL#?1SL051Testing软件测试网7C-UzEo

  那么什么是触发器呢?严格意思上说,触发器就是存储过程,只不过它的执行不是由程序调用,也不是手工启动,而是由事件来触发。

G"~+BG F(h]051Testing软件测试网/?*m3}\^

  创建语句如下:

)r7jm.[4b X|8]x%B0
51Testing软件测试网-q ZTI\7xsv%D8IPn

CREATE TRIGGER`<databaseName>`.`<triggerName>`51Testing软件测试网RU/Y p)N

51Testing软件测试网Q MJB-M*p]

< [ BEFORE |AFTER ] > < [ INSERT | UPDATE | DELETE ] >51Testing软件测试网d Vm4ori

51Testing软件测试网+t\(N0hL b8X

ON <tableName>51Testing软件测试网1al.ez!c-CCA

'H ^{'f4O,f\1H0FOR EACH ROW51Testing软件测试网vr:J] a-y&mAo

jf%B*b e0BEGIN

uR*x-tLQ y y0

`3Axm8{[.X0--do something

:^ {1OLcD0

C9B B`H[}5eH0END |

!x@#Z!y%e:W0

FN"crgC&zs'N6x0  这时有人不解了,什么叫由事件来触发呢?其实这和botton按钮的点击事件一样,只不过触发器是由Insert、Update、Delete这些动作触发,而botton的点击事件是通过点击的动作来触发的。51Testing软件测试网#T#h"O1|HmF#M6Co_

51Testing软件测试网l/k{od2w uA

  那么存储过程有哪些优点呢?

?7a q{(OS3u&}2g051Testing软件测试网6_8X:d9K7T3A

  1、速度快。51Testing软件测试网P9g-|A9h N

51Testing软件测试网\7p.A:c7D

  在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。也就是说,存储过程在调用前就已经编译好了,所以存储过程能以极快的速度执行。

RZ+TC+v+RI(PkN051Testing软件测试网 JP BrtuJ'EB

  2、存储过程可以重复使用,可减少数据库开发人员的工作量 。51Testing软件测试网;d;| A8H[

51Testing软件测试网F;T M i W VhZ

  3、保证数据的安全性。51Testing软件测试网H^MdJ1EU5|

A5c P_-s0  通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。51Testing软件测试网cbaaOBR

1i_,pRrcY0  4、保证数据的完整性。

F wrC!\D%DM2SS,b0

*~a8yY/]AK0  通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。51Testing软件测试网Gob1|J)k[d T

1V2u9z2Fh#o%D0  既然存储过程有如此多的好处,那么我们做项目的时候是不是用的越多越好呢?答案肯定是NO。万事都有个度,存储过程也一样。如果在一个程序系统中大量的使用存储过程,那么必然会导致它的数据结构相当复杂,这样维护该系统将会是相当困难的一件事。

eAm;p]6l$Hb:\0

]-X yt#V)~E0  让我们合理使用触发器和存储过程,尽情享受他们带给我们的方便。

"K }+gM5Ok]5RF0

TAG:

liulisuo的个人空间 引用 删除 liulisuo   /   2012-07-02 14:29:24
5
 

评分:0

我来说两句

Open Toolbar