MySQL中的存储过程和函数

这几天学了存储过程和函数,总结的不是太完整,先记下来。

#存储过程
/*


含义:一组经过预先编译的sql语句的集合
好处:
1、提高了sql语句的重用性,减少了开发程序员的压力
2、提高了效率
3、减少了传输次数


分类:
1、无返回无参
2、仅仅带in类型,无返回有参
3、仅仅带out类型,有返回无参
4、既带in又带out,有返回有参
5、带inout,有返回有参
注意:in、out、inout都可以在一个存储过程中带多个
*/

案例


#1.创建存储过程或函数实现传入用户名和密码,插入到admin表中
DELIMITER $

CREATE PROCEDURE test_pro1(IN username VARCHAR(20),IN psw VARCHAR(20))
BEGIN
	INSERT INTO admin(username,PASSWORD) VALUES('123','123');
END $


#2.创建存储过程或函数实现传入女神编号,返回女神名称和女神电话
CREATE PROCEDURE test_pro2(IN beautyId INT,OUT bName VARCHAR(20),OUT bPhone VARCHAR(20))
BEGIN 
	SELECT NAME,phone INTO bName,bPhone
	FROM beauty b
	WHERE id = beautyId;
END $

#3.创建存储存储过程或函数实现歘人两个女神生日,返回大小
CREATE PROCEDURE test_pro7(IN bDate1 DATETIME,IN bDate2 DATETIME,OUT result INT)
BEGIN
	CASE 
	WHEN DATEDIFF(bDate1,bDate2`beauty`)>0 THEN SELECT 1 INTO result;
	WHEN DATEDIFF(bDate1,bDate2)=0 THEN SELECT 0 INTO result;
	ELSE SELECT -1 INTO result;
	END CASE;
END$

#调用
CALL ('1995-5-5','1996-6-6',@r);
SELECT @r$

#四、创建存储过程或函数实现传入一个日期,格式化成xx年xx月xx日并返回
CREATE PROCEDURE test_pro8(IN myDate DATETIME,OUT formatdate VARCHAR(20))
BEGIN
	SELECT DATE_FORMAT(myDate,'%Y年%m月%d日') INTO formatdate;
END$

#五、创建存储过程或函数实现传入女神名称,返回:女神 and 男神  格式的字符串
#如 传入 :小昭
#返回: 小昭 AND 张无忌

CREATE PROCEDURE test_pro9(IN bName VARCHAR(20),OUT result VARCHAR(20))
BEGIN
	SELECT CONCAT(bName,' and ',IFNULL(boyName,'无')) INTO result
	FROM boys b
	JOIN beauty be ON b.id = be.boyfriend_id
	WHERE be.name = bName;
END$

CALL test_pro9('赵敏',@r)$
SELECT @r$

#六、创建存储过程或函数,根据传入的条目数和起始索引,查询beauty表的记录

CREATE PROCEDURE test_pro12(IN size INT,IN startIndex INT)
BEGIN
	SELECT * FROM beauty
	LIMIT startIndex,size;
END$

CALL test_pro12(5,1);






函数
#函数
#一、创建函数


学过的函数:LENGTH、SUBSTR、CONCAT等
语法:


CREATE FUNCTION 函数名(参数名 参数类型,...) RETURNS 返回类型
BEGIN
函数体


END


#二、调用函数
SELECT 函数名(实参列表)


案例

#案例1:歘人一个女生名称,返回对应男神名,如果没有该男神,则返回null


CREATE FUNCTION my_fun1(bName VARCHAR(20)) RETURNS VARCHAR(20)
BEGIN
	DECLARE boyName VARCHAR(20);#声明一个变量
	SELECT boys.`boyName` INTO boyName
	FROM boys
	RIGHT JOIN beauty b
	ON boys.`id`=b.boyfriend_id
	WHERE b.name=bName;
	
	RETURN boyName;
END $



#案例2:传入用户名和密码,返回admin表中该用户的记录数

CREATE FUNCTION my_fun2(username VARCHAR(20),PASSWORD VARCHAR(20)) RETURNS INT
BEGIN
	DECLARE i INT DEFAULT 0;
	SELECT COUNT(*) INTO i
	FROM admin 
	WHERE admin.username=username AND admin.PASSWORD=PASSWORD;
	RETURN i;
END $

三、函数和存储过程的区别

函数:关键字 FUNCTION ,调用语法 SELECT 函数() ,返回值 只能是一个 , 应用场景  一般用于查询结果为一个值并返回时,当有返回值而且仅仅一个


存储过程:关键字 PROCEDURE  ,调用语法  CALL 存储过程(), 返回值  可以有0个或多个 , 应用场景  一般用于更新

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值