MySQL存储过程的基本用法

1.使用in和out传入参数和接收返回值
DELIMITER $$#将语句的分隔符设置为$$
CREATE PROCEDURE multi(IN a INT, IN b INT, OUT c INT)
BEGIN
	#这里写存储过程要实现的逻辑
	SET c = a * b;
END $$
DELIMITER ;#将分隔符改为;

DELIMITER:用于改变语句的分隔符。默认情况下,mysql会以分号“;”作为语句的分隔符,存储过程包含多个sql语句,所以会被解析为多个sql依次执行。因此必须改变分隔符,将创建存储过程的多个sql视作一个整体

IN:入参,后跟参数名、类型

OUT:返回结果,后跟参数名、类型

2.通过select语句给变量赋值
DELIMITER $$
CREATE PROCEDURE total(OUT total INT)
BEGIN
	SELECT COUNT(*) INTO total FROM `db3`.`test`;#将查询到的值赋值给total
END $$
DELIMITER ;
3.接收存储过程的返回值

以上述total存储过程为例,调用方式如下:

call total(@c);#@c代表声明了一个c变量
select @c;#查看存储过程结果
4.测试用,批量插入n条数据模板
#插入指定条记录
DELIMITER $$
CREATE PROCEDURE add_batch(IN num INT)
BEGIN
	DECLARE i INT DEFAULT 1;#声明临时变量i,默认1
	WHILE i <= num DO
		#把这里替换为自己的插入逻辑即可
		INSERT INTO db3.test(`name`, `age`) VALUES(CONCAT('user',i), 20);
		SET i = i + 1;
	END WHILE;
END $$
DELIMITER ;

注意,像这种批量插入一定要在一个事务中执行,不然mysql会把每一次insert当作一个事务,那么会导致存储过程执行速度很慢。调用示例如下:

start transaction;
call add_batch(1000000);#插入100w条数据
commit;

注:每次自己进行小测试时,需要往mysql中插入几十上百万的模拟数据,老是忘了存储过程、while循环怎么写,于是借助博客记录一下。虽然可以使用jdbc或者其他工具来批量插入,但架不住存储过程最直接、方便。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值