存储过程和函数
含义:一组预先编译好的SQL语句集合
好处:
1、提高代码的重用性
2、简化操作
2、减少编译次数和与数据库服务器得到连接次数,提高效率
一、创建语法
CREATE PROCEDURE 存储过程名称(参数列表)
BEGIN
存储过程体(一组合法的SQL语句)
END
注意:
1、参数列表包含三部分
参数模式 参数名 参数类型
例如:IN stuname VARCHAR(20)
参数模式:
IN:所修饰参数可作为输入,也就是该参数需要调用方传入
OUT:所修饰参数作为输出,也就是该参数可作为返回值
INOUT:所修饰参数既可以作为输入又可以作为输出,也就是需要传入值,有可以返回
2、如果存储过程体仅仅只有一句话,BEGIN END 可以省略
-存储过程体中的每条SQL语句结尾必须加分号
-存储过程的结尾可以使用DELIMITER重新设置
语法:DELIMITER 结束标记 -如:DELIMITER $
二、调用语法
CALL 存储过程名(实参列表);
USE girls;
示例:
# 1、【空参列表】案例:插入到admin表中五条记录
以下语句在CMD中执行
SELECT * FROM admin;
DELIMITER $
CREATE PROCEDURE myp1()
BEGIN
INSERT INTO admin(username,PASSWORD)
VALUES('john1','0000'),('rose','1234'),('lily','0987'),('bob','2345'),('lucy','9878');
END $
# 调用
CALL myp1()$
# 查看
SELECT * FROM admin$
以 $ 代替分号结尾
# 案例2:创建带in模式的存储过程
# 根据女神名,查询对应的男朋友信息【in】
CREATE PROCEDURE myp2(IN beautyname VARCHAR(20))
BEGIN
SELECT b.*
FROM boys b
RIGHT OUTER JOIN beauty g
ON b.id=g.boyfriend_id
WHERE g.name=beautyname;
END $
# 调用
CALL myp2('柳岩')$
# 出现Increect string value :'\\\'error时,改变字符集
SET NAMES bgk$
# 案例3:创建存储过程,实现用户是否登录成功【两个in】
# admin中用户名和密码两个参数
CREATE PROCEDURE myp4(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))
BEGIN
DECLARE result INT DEFAULT ''; # 声明并初始化
SELECT COUNT(*) intoresult # 赋值
FROM admin a
WHERE a.username = username
AND a.password = PASSWORD;
SELECT IF(result>0,'成功','失败'); # 使用
END $
# 如果没有加a.,按就近原则,username和password表示传入的两个值
# 调用
CALL myp4('john','8888')$
# 案例4:根据女神名,返回对应的男神名【in out】
CREATE PROCEDURE myp5(IN girlname VARCHAR(20),OUT boyname VARCHAR(20))
BEGIN
SELECT b.boyName INTO boyname
FROM beauty g
LEFT OUTER JOIN boys b
ON b.id=g.boyfriend_id
WHERE g.name=girlname;
END $
SET @boyname$ # 定义用户名称,或不定义,直接在下面写@boyname
CALL myp5('双儿',@boyname)$
# 查看
SELECT@boyname$
# 案例5:根据女神名,返回对应的男神名及魅力值【in out out】
CREATE PROCEDURE myp6(IN girlname VARCHAR(20),OUT boyname VARCHAR(20),OUT userCP INT)
BEGIN
SELECT b.boyName,b.userCP INTO boyname, userCP
FROM beauty g
LEFT OUTER JOIN boys b
ON b.id=g.boyfriend_id
WHERE g.name=girlname;
END $
CALL myp6('王语嫣',@boyname,@usercp)$
SELECT @boyname,@usercp$
# 案例6:传入a b两个值,要求两个值翻倍并返回【inout】
CREATE PROCEDURE myp7(INOUT a INT, INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*2;
END $
SET @m=10; # 定义用户变量
SET @n=8;
CALL myp7(@m,@n)$ # 调用
SELECT @m,@n$ # 查看
来源:CSDN
作者:昵称45167920
链接:https://blog.csdn.net/weixin_45167920/article/details/104613252