1.基本语法:
create procedure <过程名> ([过程参数])
<过程体>([过程参数])
IN | OUT | INOUT <参数名>([参数类型])
-
过程名
存储过程的名称,默认在当前数据库中创建。若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即 db_name.sp_name。注:名称应当尽量避免选取与 MySQL 内置函数相同的名称,否则会发生错误。 - 过程参数
当有多个参数时,参数列表中彼此间用逗号分隔。存储过程可以没有参数(此时存储过程的名称后仍需加上一对括号)
MySQL 存储过程支持三种类型的参数:输入参数IN、输出参数OUT和输入/输出参数INOUT,输入参数可以传递给一个存储过程,输出参数用于存储过程需要返回一个操作结果的情形,而输入/输出参数既可以充当输入参数也可以充当输出参数。需要注意的是,参数的取名不要与数据表的列名相同,否则尽管不会返回出错信息,但是存储过程的 SQL 语句会将参数名看作列名,从而引发不可预知的结果。 - 过程体
存储过程的主体部分,也称为存储过程体,包含在过程调用的时候必须执行的 SQL 语句。这个部分以关键字 BEGIN 开始,以关键字 END 结束。若存储过程体中只有一条 SQL 语句,则可以省略 BEGIN-END 标志。
在存储过程的创建中,经常会用到一个十分重要的 MySQL 命令,即 DELIMITER 命令,特别是对于通过命令行的方式来操作 MySQL 数据库的使用者,更是要学会使用该命令。 - 命令行格式:delimiter<符号> 以<符号>结束语句
符号要避免与转义字符重合,多用$$、??等代替。
2.创建无参存储过程
CREATE PROCEDURE ShowStuScore() BEGIN SELECT * FROM <表名>; END;
调用:CALL ShowStuScore();
3.有参存储过程的创建
CREATE PROCEDURE GetStuId
(IN name VARCHAR(30))
BEGIN
SELECT stuId FROM stu
WHERE stuName=name;
END;
调用:call GetStuId("Bob");
4.修改存储过程
网上几乎都建议删除重建,23333,好像也是,这个不会破坏表的结构。
5.删除存储过程
存储过程被创建后,保存在数据库服务器上,直至被删除。可以使用 DROP PROCEDURE 语句删除数据库中已创建的存储过程。
DROP { PROCEDURE | FUNCTION } [ IF EXISTS ] <过程名>
1) 过程名
指定要删除的存储过程的名称。
2) IF EXISTS
指定这个关键字,用于防止因删除不存在的存储过程而引发的错误。
注意:存储过程名称后面没有参数列表,也没有括号,在删除之前,必须确认该存储过程没有任何依赖关系,否则会导致其他与之关联的存储过程无法运行。