存储过程的概念
是一组为了完成特定功能的SQL语句集,经编译后存储在数据库
存储过程的优点
- 通过把处理封装在容易使用的单元中,简化复杂的操作
- 通常存储过程有助于提高应用程序的性能
- 存储过程有助于减少应用程序和数据库服务器之间的流量
- 存储的程序对任何应用程序都是可重用和透明的,提高程序开发效率
存储过程的缺点
- 增加数据库服务器开销
- 难以调试
- 开发和维护难度高
创建存储过程
procedureName:存储过程名称(自定义)
IN:输入参数,表示调用者向过程传入值(传入的值可以是字面量也可以是变量)
OUT:输出参数,表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
INOUT:输入输出参数,既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
--创建存储过程
CREATE PROCEDURE procedureName(IN a INT,IN b INT,OUT sum INT)
BEGIN
SET sum = a+b;
END
调用存储过程
procedureName:存储过程名称
1、2:参数
@sum:局部变量
调用存储过程:
CALL procedureName(1,2,@sum);
查看存储过程输出结果:
SELECT @sum;
定义变量
- 语法:
DECLARE variableName dateType DEFAULT value;
- 示例:
DECLAE name VARCHAR(20) DEFAULT 'jack';
变量赋值与使用
- 语法:
SET name = value;
- 示例:创建一个名称为p_school的存储过程,在存储过程中使用变量
--创建存储过程
CREATE PROCEDURE p_school()
BEGIN
--声明一个类型为VARCHAR的name变量
DECLARE name VARCHAR(20);
--给类型为VARCHAR的name变量赋值为'jack'
SET name = 'jack';
SELECT * FROM studentinfo WHERE studentName = name;
END;
--调用过程
CALL p_school ();
显示存储过程
- 语法:
SHOW PROCEDURE STATUS;
- 显示特定数据库的存储过程:
SHOW PROCEDURE STATUS WHERE db='databaseName';
- 显示特定模式的存储过程:
SHOW PROCEDURE STATUS WHERE name LIKE '%my%';
- 显示存储过程的源码:
SHOW CREATE PROCEDURE procedureName;
- 删除存储过程:
DROP PROCEDURE procedureName;