MySQL存储过程

MySQL存储过程

存储过程是什么?
MySQL 5.0 版本开始支持存储过程。
存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。
存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
怎么用?
使用假设场景:

有两张表A、B;关系:A为主表,B为子表,通过外键关联;要对A、B中的字段进行修改(要求修改B表时,要根据A的id进行修改<仅仅将YGZY改为TKL,该字段的其他不变>),如果数据量较少,可以手动,如果数据量大的话可以使用SQL来完成;这里逼自己使用MySQL的存储过程来实现;A、B表结构请见下图;
 表结构展示,backup_business字段是为了在调用存储过程后做对比用的

编写存储过程:
-------------------------开始---------------------------
DROP PROCEDURE IF EXISTS procedure_batch_update;#如果存在先删除
delimiter $$$#改变执行语句的分号,可以改成 DELIMITER // 或者 DELIMITER $$
CREATE PROCEDURE procedure_batch_update()#创建名字为procedure_batch_update的存储过程
BEGIN
	DECLARE loopNum INT DEFAULT 0;#声明循环次数;默认为0
	DECLARE totalNum INT DEFAULT 0;#声明总数;默认为0
	DECLARE tmpId INT;#临时变量;保存主表中的ID
	DECLARE tmpBusiness VARCHAR(255);#临时变量;保存主表中的编码
	DECLARE updateDataCursor CURSOR FOR SELECT id,business FROM parameter WHERE createTime>='2021-02-14 19:00:00';#声明游标
	OPEN updateDataCursor;#打开游标
	SELECT COUNT(1) INTO totalNum FROM parameter WHERE createTime>='2021-02-14 19:00:00';#查询数量
	WHILE loopNum <totalNum #while循环开始
		DO
			FETCH updateDataCursor INTO tmpId,tmpBusiness;#取出id和业务编码到指定的临时变量中存储
			#SELECT tmpId,tmpBusiness;#调试用,看是否赋值成功
			UPDATE parameter SET business=REPLACE(tmpBusiness,'YGZY','TKL') WHERE id=tmpId;#根据id更新主表business字段
			UPDATE parameter_copy SET business=REPLACE(tmpBusiness,'YGZY','TKL') WHERE parentid=tmpId;#根据主表id更新子表的business字段
		SET loopNum=loopNum+1;#循环数自加1
	END WHILE;#while循环结束
COMMIT;#提交事务
	CLOSE updateDataCursor;#关闭游标
END#结束
$$$
delimiter;
-------------------------结束---------------------------
调用存储过程
CALL procedure_batch_update();#调用存储过程
查看表数据

调用存储过程的表数据

描述

可以看到,在调用存储过程之后,表中的数据已经进行了修改,为什么没有全部修改呢?是因为在存储过程中查询数据时,进行了创建时间的限制;

想法

可以继续优化一下,将需要修改的内容作为参数输入(IN),在调用存储过程时,指定就好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值