MySQL学习笔记——存储程序(一)

一、存储程序分为以下几种:

①存储函数(stored function)。返回一个计算结果,该结果可以用在表达式里。

②存储过程(stored procedure)。不直接返回一个结果,但可以用来完成一般的运算或是生成一个结果集并传递回客户。

③触发器(trigger)。与数据表相关联,当那个数据表被INSERTDELETEUPDATE语句修改时,触发器将自动执行。

④事件(event)。根据时间表在预订时刻自动执行。

(注:MySQL对存储函数和存储过程的支持始于5.0.0版本,对触发器和事件的支持分别始于5.0.2版本和5.1.6版本。因此使用存储程序最好升级到最新的版本。

二、存储程序有以下优点和能力:

①存储程序对象的可执行部分可以用复合语句来编写,复合语句对SQL语法进行了扩展,可以包括代码块、循环和条件语句。

②存储程序被保存在服务器端,定义它们所需的代码只需在它们被创建时通过网络传递一次,不必每次执行都要传递一次,大大减少开销。

③它们可以把复杂的计算封装为程序单元,而你可以简单地通过程序单元的名字来调用它们。

④它们可以用来实现“标准化”的计算操作。你可以把一组存储程序打包为一个“函数库”供其他应用程序调用,让那些应用程序以同样的方式完成操作。

⑤它们提供了一种错误处理机制。

⑥它们可以提高数据库的安全性。可以通过选择存储程序执行时所需要的权限对敏感数据的访问情况进行限制和调控。

三、注意一个问题:复合语句块里的语句必须以分号(;)彼此隔开,但因为分号同时也是mysql程序默认使用的语句分隔符,所以在使用mysql程序定义存储程序时会发生冲突。解决办法是使用delimiter命令把mysql程序的语句分隔符重定义为另一个字符或者字符串。在定义完存储程序后,可以把mysql程序的语句终止符重新定义为分号。



  

四、存储函数将向调用者返回一个计算结果,结果可以在表达实里。存储过程需要使用CALL语句来调用,是一个独立的操作,不能用在表达式里。

使用存储过程的情况主要有两种:

①只需要通过运算来实现某种效果或动作而无需返回一个值;

②运算需要返回两个或更多的结果集(函数做不到这一点)。

     存储函数要用CREATE FUNCTION语句来创建,存储过程要用CREATE PROCEDURE语句来创建。


 

存储过程和存储函数很相似,但它不返回值,因此,它没有RETURNS子句或任何RETURN语句。


 

存储例程(指存储函数和存储过程)还可以修改数据表。如下所示:

 


 注意:存储函数必须遵守这样一条限制:不允许对调用本函数的语句正在读或写的数据表进行修改。存储过程通常没有这个限制,但如果它们是从存储函数里被调用,就需要遵守这条限制。

猜你喜欢

转载自raincoder.iteye.com/blog/1672224