MySQL 存储过程(Stored procedure)是一种存储在数据库中的程序。它可以包含多个 SQL 语句,提供许多过程语言的功能,例如变量定义、条件语句、循环语句、游标以及异常处理等。主要优点有实现代码的重用和集中管理,实现业务的封装和隔离等。
接下来简单介绍下存储过程的主要内容:
1,存储过程的创建
CREATE DEFINER=`vrms`@`%` PROCEDURE `test_name`( IN param1 data_type ,IN param2 data_type ) COMMENT '测试
test_name是存储过程名称;param1 是参数名称,IN 表示输入参数(默认模式),data_type 是参数的数据类型。
2,存储过程的具体使用
假定有两张数据来源表 table1和table2,我们通过联合查询取得多条数据 ,table3为我们要插入数据的表,表中有column1,column2,column3,column4四个字段,存储过程实如下:
CREATE DEFINER=`vrms`@`%` PROCEDURE `test`( IN queryDate date )
COMMENT '新增数据'
BEGIN
/**
新增数据
@auther
参数说明:
queryDate :数据时间
*/
-- 定义字段
declare column_1 varchar(50);
declare column_2 varchar(50);
declare column_3 varchar(50);
declare column_4 varchar(50);
-- 自定义控制游标循环变量,默认false
DECLARE done INT DEFAULT FALSE;
-- 定义游标并输入结果集
DECLARE sale_plural_list CURSOR FOR (
-- 此处查询组装数据的sql根据实际业务来写
select
t1.id,
t1.name,
t2.price,
t2.count
from table1 t1 left join table2 t2 on t1.id = t2.id where t1.date = queryDate
);
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
-- 异常信息处理
GET DIAGNOSTICS CONDITION 1
error_message = MESSAGE_TEXT, error_no = MYSQL_ERRNO;
ROLLBACK;
END;
-- 绑定控制变量到游标,游标循环结束自动转true
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 如果想自定义值可用set ,要注意的是set值必须在 DECLARE 定义值完成之后
set column_1 = '默认值';
/*开启事务*/
START TRANSACTION;
-- 打开游标
OPEN sale_plural_list;
-- 开始循环体,myLoop为自定义循环名,结束循环时用到
myLoop: LOOP
-- 将游标当前读取行的数据顺序赋予自定义变量
FETCH sale_plural_list into column_1,column_2,column_3,column_4;
-- 判断是否继续循环
IF done THEN
-- 结束循环
LEAVE myLoop;
END IF;
if 条件判断
then
set column_1 = 'xx';
ELSE
set column_1 = 'xx';
END IF;
-- 循环插入数据
INSERT INTO `table3`( `column1`, `column2`, `column3`,`column4`) VALUES (column_1, column_2, column_3, column_4);
COMMIT; -- 提交事务
END LOOP myLoop; -- 结束自定义循环体
CLOSE sale_plural_list; -- 关闭游标
COMMIT;
END
此外,在存储过程中我们也可以调用其他函数或者存储过程来完成一系列的操作,提高代码的重复使用率,达到事半功倍的效果。