存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。
存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
声明语句结束符,可以自定义:
DELIMITER(定界符) $$
或
DELIMITER //
声明存储过程:
CREATE PROCEDURE demo_in_parameter(IN p_in int)
CREATE PROCEDURE 存储过程名(输入符 参数名 参数类型)
存储过程开始和结束符号:
BEGIN ....
(内容)
END
变量赋值:
SET @p_in=1
变量定义:
DECLARE l_int int unsigned default 4000000;
实例
mysql> delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)
-> BEGIN
-> DELETE FROM MATCHES
-> WHERE playerno = p_playerno;
-> END$$
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter; #将语句的结束符号恢复为分号
调用存储过程
call delete_matches(12);
call 函数名(参数);
IN输入实例
DELIMITER //
CREATE PROCEDURE insert_data(IN a_name string,IN a_age int)
BEGIN
insert into aware(name,age) values (a_name ,a_age ) ;
END//
DELIMITER ;
OUT实例
DELIMITER //
CREATE PROCEDURE out_data(OUT a_name string,OUT a_age int)
BEGIN
select a_name,a_age ;
set a_name =1;
set a_age=2;
select a_name,a_age;
END//
DELIMITER ;
INOUT实例
mysql> delimiter $$
mysql> create procedure inout_data(inout a_name int)
-> begin
-> select a_name ;
-> set a_name =2;
-> select a_name ;
-> end
-> $$
mysql> delimiter ;
mysql> set @a_name =1;
mysql> call inout_data(@a_name);
+---------+
| a_name |
+---------+
| 1 |
+---------+
+---------+
| a_name |
+---------+
| 2 |
+---------+
mysql> select @a_name ;
+----------+
| @a_name |
+----------+
| 2 |
+----------+
#调用了inout_data存储过程,接受了输入的参数,也输出参数,改变了变量
局部变量声明一定要放在存储过程体的开始:
DECLARE variable_name [,variable_name...] datatype [DEFAULT value];
DECLARE(声明) 变量名[,若干变量名...] 数据类型 [DEFAULT value(默认值)];
SET @variables_name = 2
SET 变量名 = 表达式值
MySQL 存储过程可使用两种风格的注释
两个横杆--:该风格一般用于单行注释。
/* */: 一般用于多行注释。
示例
create procedure sp1(in p int)
comment 'insert into a int value'
begin
/* 定义一个整形变量 */
declare v1 int;
/* 将输入参数的值赋给变量 */
set v1 = p;
/* 执行插入操作 */
insert into test(id) values(v1);
end
//
mysql > DELIMITER //
mysql > CREATE PROCEDURE proc1 --name存储过程名
-> (IN parameter1 INTEGER)
-> BEGIN
-> DECLARE variable1 CHAR(10);
-> IF parameter1 = 17 THEN
-> SET variable1 = 'birds';
-> ELSE
-> SET variable1 = 'beasts';
-> END IF;
-> INSERT INTO table1 VALUES (variable1);
-> END
-> //
mysql > DELIMITER ;
show procedure status where db='数据库名';
或者
select routine_name from information_schema.routines where routine_schema='数据库名';
或者
select name from mysql.proc where db='数据库名';
数据库名可通过以下代码查看
select database();
或者
status;
ALTER PROCEDURE
DROP PROCEDURE
参考文章
MySQL 存储过程 | 菜鸟教程MySQL 5.0 版本开始支持存储过程。 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。 存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。 优点 存储过程可封装,并隐藏复杂的商业逻辑。 存储过程可以回传值,并可以接受..https://www.runoob.com/w3cnote/mysql-stored-procedure.html