mysql存储过程 和 函数

本文对比了数据库中存储过程与函数的特点与用途,强调了两者在返回值数量上的不同,并介绍了参数模型及其应用实例。

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

存储过程和函数的区别
存储过程和函数,都是一组预先编译好的sql语句的集合
都具有下列的优点:
1)提高代码的重用性
2)简化操作
3)减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

区别:
存储过程:可以有0个返回值,也可以有多个返回值,适合做批量插入、批量更新等操作
函数:有且仅有1个返回值,适合做处理数据后,返回的一个结果

存储过程
参数模型的代表含义
in 代表输入值
out 代表输出值
inout 既可代表输入值,也可代表输出值

	DELIMITER //               ---------声明 // 为语句结束符
	DROP PROCEDURE IF EXISTS test1//             ------------如果test1存在,则删除
	CREATE PROCEDURE test1(INOUT a INT,INOUT b INT)                    -----创建存储过程
	BEGIN           ------相当于java中的 " { "
		SET a=a*2;             -----此处的 “ ; ”只代表一个分隔符,不是语句结束符
		SET b=b*2;
	END //          ------相当于java中的 " }"
	DELIMITER ;                ---------声明 ;为语句结束符
	
	
	SET @m=10;           ----------声明 用户变量 在变量名称前面加 “ @ ”
	SET @n=20;,
	CALL test1(@m,@n);    -----调用存储过程
	SELECT @m,@n;         -----查询用户变量的值

在这里插入图片描述

函数

	DELIMITER //  
	#-----创建函数test,参数为username,参数类型为 varchar,返回类型为 int
	CREATE FUNCTION test(username VARCHAR(20)) RETURNS INT     ----------此处是 return**s**
	BEGIN
		DECLARE result INT;    #-----声明一个局部变量用于返回使用
		SELECT a.id INTO result  #-----将查询到的结果写进局部变量
		FROM admin a
		WHERE a.username=username;
		RETURN result;   ----------此处是 return
		
	END //
	DELIMITER ;
	
	SELECT test('张三');  #-----调用函数

若 return 的结果超过1条,就会报错 Result consisted of more than one row
在这里插入图片描述3种循环结构:
1)while 先判断后执行
Label:while loop_condition
do
loop_list;
end while Label;

		例如:
		DELIMITER // 
		CREATE PROCEDURE testWhile(IN total INT)
		BEGIN
			DECLARE i INT DEFAULT 0;    #-----声明局部变量 i
			a:WHILE i<= total DO
				SET i=i+1;          #-----修改局部变量的值
				IF MOD(i,2) !=0 THEN ITERATE a;  #-----如果 i 取模 2 的结果不等于 0 ,则进入下一个循环
				END IF;
				INSERT INTO admin(username,`password`) VALUES(CONCAT('小明',i),'666');
			END WHILE a;
		END//
		DELIMITER ;
		
		CALL testWhile(100);
		
		SELECT * FROM admin;

2)repeat 先执行后判断
Label:repeat
loop_list
until end_condition;
end repeat Label;

3)loop 没有条件的死循环,需要搭配 leave Label 跳出循环
Label:loop
loop_list
end loop Label;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值