Mysql存储过程的使用

本文详细介绍了MySQL存储过程的概念,包括如何创建存储过程、定义参数、使用游标进行数据处理、异常处理以及调用其他函数。通过实例展示了在处理表间数据操作时的代码结构和逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

此外,在存储过程中我们也可以调用其他函数或者存储过程来完成一系列的操作,提高代码的重复使用率,达到事半功倍的效果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值