很多朋友在刚开始接触存储过程的时候,都会有些疑惑:什么是存储过程?怎么理解这个存储过程?

那么我们现在先搞懂什么叫“存储过程”!首先给大家看一下几个百科网站给出的答案:

百度百科:

     存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

智库百科: 

存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理,是数据库中的一个对象。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。

维基百科:

    储存程序 (Stored Procedure),又可称预储程序或者存储过程,是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象,它可以视为数据库中的一种函数或子程序。

---------------------------------------------------------------

预编译集合、一段程序代码。其实说白了存储过程就是存储在数据库中的一个程序,该程序内包含了一些SQL语句,主要是完成某一个SQL语句操作。这就类似于C语言中的函数,存储过程的名称就是函数名,存储过程内部的语句就是函数体,同样的可以被重复调用。

    我个人的理解就是,“存储过程”这个词可以把他分割出来理解,即:存储(动词) + 过程(名词);翻译过来可以是:所存储的一个过程。其中这个“过程”就是完成某一个工作的过程。所以可以把“存储过程”理解成存储在数据库中的一个过程(函数),这个过程(函数)就是用来完成某一项工作的。

     知道什么是“存储过程”后,那么我们该明白它到底有什么好处,为什么要使用它。

存储过程的优点:


1、重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。


2、减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。


3、安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。


由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。


存储过程的缺点:


1、调试麻烦。


2、移植性差。不同数据库支持的语言不一样,其存储过程的编写规则也不一样,所以存储过程无法移植到另一类数据库。


3、重新编译问题。因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。


4、不能大量使用。如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是非常难、而且代价是空前的,维护起来更麻烦。