mysql 存储过程

说实话,MySQL 存储过程还是挺有趣的。
2 003 年MySQL 4 .1 问世时,它不支持存储过程。
事实上,当时很多人都在使用它,但功能并不是那么有趣。
存储过程功能最终是在2 005 年发布的MySQL 5 .0中才添加的。
突然之间,数据库处理速度显着提高,编程变得更加灵活。

要创建存储过程,请使用以下格式:CREATE PROCEDURE 进程名称([进程参数[,...]])[特性...]进程主体。
例如,如果要创建一个名为 proc1 、输出参数为 s 的存储过程,则其类型为 int:
sql。
分隔符 // 创建过程 proc1 (OUT s int) 开始 SELECT COUNT() INTO FROM 用户; 结束 // 分离器;
注意几个细节:DELIMITER // 和DELIMITER;这两句话非常重要。
为什么?由于MySQL默认的分隔符是;,如果不更改它,存储过程将作为单独的SQL语句执行,肯定会出错。
所以首先使用DELIMITER //改变分隔符,让MySQL不处理;作为执行命令,但作为存储过程的一部分。
使用后记得将分离器放回原处。

存储过程可以有输入参数、输出参数或输入和输出参数。
上例中的s为输出参数,类型为int。
如果有多个参数,直接使用并分开即可。

流程主体的一部分包含在 BEGIN 和 END 中。
在其中写入 SQL 语句,例如 SELECT COUNT() INTO s FROM user;该行将用户表中的行数存储在 s 中。

就这样,一个简单的存储过程就创建好了。
使用起来确实很方便,尤其是在处理复杂逻辑的时候,不需要每次都写重复的SQL语句。

何为存储过程,举例说明

2 02 3 年,我朋友的公司使用存储过程来管理数据。
他说,这样服务器功能强大,客户端负载小。
比如要插入数据,首先检查是否存在,不存在则插入,存在则更新。
他给我看了一个例子:
sql 创建过程[insert_A_Employees](@fWorkNo[int],@fWorkName[char](1 0),@fDeptName[varchar](2 0),@fGroupName[varchar](2 0),@fRecordDate[datetime])AS 声明@iCountent select@iCount=count() fromA_PEKERJAmana@fWorkNo=fWORKNO 如果@iCount=0 开始了 INSERTINTO[CLKQ].[dbo].[A_Employees]([fWorkNo],[fWorkName],[fDeptName],[fGroupName],[fRecordDate])VALUES(@fWorkNo,@fWorkName,@fDeptName,@fRecordDate) 返回1 结束 另一个 开始了 更新[CLKQ].[dbo].[A_Employees]set[fWorkName]=@fWorkName,[fDeptName]=@fDeptName,[fGroupName]=@fGroupName,[fRecordDate]=@fRecordDatewhere[fWorkNo]=@fWorkNo 返回0 结束 去
客户端只需要提供一些值,服务器处理其余的。
不过,他提到ACCESS等数据库不具备此功能。
算了,技术太深奥了。