mysql编程流程控制_MySql的回顾十三:存储过程与函数与流程控制

阑风长雨秋纷纷,四海八荒同一云。

直蹦主题继续由我带领各位读者学习MySql基础最后部分存储过程与函数与流程控制。

存储过程的创建

#存储过程和函数存储过程和函数:类似于java中的方法好处:1.提高代码的重用性2.简化操作

#存储过程含义:一组预先编译好的SQL语句的集合,理解成批处理语句1.提高代码的重用性2.简化操作3.减少编译次数并且减少和数据库服务器的连接次数,提高了效率一句话就是简单,安全,性能高#一.创建语法CREATE PROCEDURE 存储过程名(参数列表)BEGIN存储过程体(一组合法的SQL语句)END注意:1.参数列表包含三部分参数模式 参数名 参数类型举例:IN stuname VARCHAR(20)参数模式:IN:该参数可以作为输入,也就是该参数需要调用方传入值OUT:该参数可以作为输出,也就是该参数可以作为返回值INOUT:该参数即可作为输入又可以作为输出,也就是该参数即需要传入值,又可以返回值2.如果存储过程仅仅只有一句话,BEGIN END可以省略存储过程体中的每条SQL语句的结尾要求必须加分号。存储过程的结尾可以使用DELIMITER重新设置语法:DELIMITER 结束标记#例DELIMITER $#PROCEDURE 过程#二.调用语法CALL 存储过程名(实参列表);#1.空参列表#案例:插入admin表中五条记录.整个操作在CMD或者LINUX下操作USE girls;SELECT * FROM admin;

950a928d0d6b17da4cffc98f391a9164.png

#创建存储过程DELIMITER $CREATE PROCEDURE myp2()BEGININSERT INTO admin(username,`password`)VALUES('xiyangyang','0000'),('xiongda','0000'),('xionger','0000'),('jiji','0000'),('feimao','0000');END $

fcbc9cc699802e5e38503238c37e7cce.png

191adc612fa36420bc75c4b9ae3bff4b.png

#调用CALL myp2() $

06ccb7028d086c32fcbfeb3fcb0d9aa7.png

#查看SELECT * FROM admin$

ed7ba96b14594e7ae9d7f8b099887c27.png

#2.创建带in模式参数的存储过程#案例1.创建存储过程实现:根据女神名,查询对应的男神CREATE PROCEDURE cunchu2(IN beautyName VARCHAR(20))BEGINSELECT bo.*FROM boys boRIGHT JOIN beauty b ON bo.id=b.boyfriend_idWHERE b.`name`=beautyName;END $

72fb6a08339db7937b4a04f1bcc9fdae.png

#调用CALL cunchu2('妙法')$

0ff496d93da9aa6889c7926e76d08a5e.png

提示:遇到ERROR 1366 Incorrect STRING VALUE '\xC1\XF8\XD2'表时字符集错误解决方法:设置字符集,用了存储过程结尾处,用$结尾SET NAMES GBK$SET NAMES UTF8$#案例:创建存储过程实现,用户是否登陆成功CREATE PROCEDURE cuchu3(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))BEGINDECLARE result VARCHAR(20) DEFAULT ''; #声明并初始化SELECT COUNT(*) INTO result #赋值FROM adminWHERE admin.username=usernameAND admin.password=PASSWORD;SELECT result; #使用END $

d3f11b33c9e4088a7d1ee5670b17f0e8.png

#调用CALL cuchu3('石原','1918')$

79aafda0c57214eb6322bf9906bd06db.png

#调用CALL cuchu3('banyuan','0002')$

822d9ba61bcbc5341a2b75a37f65c984.png

#添加逻辑//storage存储CREATE PROCEDURE storage4(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))BEGINDECLARE result INT DEFAULT 0;SELECT COUNT(*) INTO resultFROM adminWHERE admin.username=usernameAND admin.password=PASSWORD;SELECT IF(result>0,'成功','失败');END $#调用CALL storage4('石原','1918')$

3a6564b454098980e6ef5fff4f989580.png

#调用CALL storage4('banyuan','0002')$

739e41bf719f5a67fd3e57dec7cd2e62.png

#3.创建带out模式的存储过程#案例1:根据女生名,返回对应的男生名(单参)单个添加测数据INSERT INTO boys VALUES(4,'黑猫警长',200);UPDATE boys SET boyName='探长维乐' WHERE id=4;INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)VALUES(13,'侦探梅拉德','女','1990-2-2','18699888880',NULL,4);定义结束符,因为连接断开了,所以要重新定义结束符。DELIMITER $

a7805f59f7c5c650c69f6532392a1561.png

创建存储过程CREATE PROCEDURE storage5(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20))BEGINSELECT bo.boyName INTO boyNameFROM boys boINNER JOIN beauty b ON bo.id=b.boyfriend_idWHERE b.name=beautyName;END $定义SET可以省略,调用存储过程执行CALL storage5('侦探梅拉德',@bName)$SELECT @bName$

e3835229db420d5e8c0f5789d404e81d.png

#案例:根据女生名,返回对应的男神名和男生魅力值。(多参)多个返回值CREATE PROCEDURE storage6(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT userCP INT)BEGINSELECT bo.boyName,bo.userCP INTO boyName,userCPFROM boys boINNER JOIN beauty b ON bo.id=b.boyfriend_idWHERE b.name=beautyName;END $

82a3f56a6c9e6c92421caa79b97e295f.png

执行CALL storage6('侦探梅拉德',@bName,@userCP)$

faa725bb7deea723e6b60998107f3829.png

调用SELECT @bName,@userCP$

cddd807eb749328b9a503bea95d472b1.png

#4.创建带inout模式参数的存储过程。#案例1:传入a和b两个值,最终a和b都翻倍(重新赋值)并返回#局部变量的赋值SET#局部变量不用加@CREATE PROCEDURE storage7(INOUT a INT,INOUT b INT)BEGINSET a=a*2;SET b=b*2;END $

b85dc964aa65cd30c9d35e5bf6f896f1.png

不能直接调用,a与b现在没值,所以先要定义两个变量。调用:名字可以不一样。SET @m=10$SET @n=20$

8edc0313aaebfc8a7eab4c077bb58d1b.png

传过去是两个有值的变量CALL storage7(@m,@n)$

f9f395332aa9da1a7d749e10c5f3d509.png

查看值SELECT @m,@n$

5406ab04411d5f53b7122576f591631f.png

#练习#一.创建存储过程实现传入用户名和密码,插入到admin表中。CREATE PROCEDURE login(IN username VARCHAR(20),IN loginpwd VARCHAR(20))BEGININSERT INTO admin(admin.username,PASSWORD)VALUES(username,loginpwd);END $

4df2cef4076937b5d7954ebc6d5c4cef.png

调用CALL login('admin','0000')$

4c02869632b9640ba8e9bcab6f1376ba.png

#查看SELECT * FROM admin$

3fbd9ae2ca98dd0b4465e759a13651b6.png

#二.创建存储过程实现传入女生编号,返回女生名称和女生电话。CREATE PROCEDURE test_pro2(IN id INT,OUT mingzi VARCHAR(20),OUT dianhua VARCHAR(20))BEGINSELECT b.name,b.phone INTO mingzi,dianhuaFROM beauty bWHERE b.id=id;END $

ba75989f1988ba8f1a09c03510e70504.png

#调用CALL test_pro2(13,@n,@p)$

7de1c4335bbe98072f39291bb88be4bb.png

#查看SELECT @n,@p$

c82642c4e8dfea0878f700d034fd09c6.png

#三.创建存储过程或函数实现传入两个女生生日,返回大小#返回正数值1比值2大,负数值1比值2小,相等返回0#运用函数直接比较DATEDIFF(值1,值2)CREATE PROCEDURE test_pro3(IN birth1 DATETIME,IN birth2 DATETIME,OUT result INT)BEGINSELECT DATEDIFF(birth1,birth2) INTO result;END $

265e4a586509e590926596acc3b41736.png

#调用CALL test_pro3('1998-8-1',now(),@result)$

c71cdf13af16ffbf6a852568c80b2188.png

#查看SELECT @result$

5f0f7c1e7fc6806fd589146344d9609a.png

存储过程的删除#删除存储过程语法:

DROP PROCEDURE 存储过程名;#定义了结束符所以$结尾。不定义结束符就用“;”结尾。DROP PROCEDURE cuchu;DROP PROCEDURE cuchu2$

1d515a936d20a6899c7a88ff17cce4e5.png

#查看存储过程的结构。SHOW CREATE PROCEDURE login;SHOW CREATE PROCEDURE login$

51b80a4d86c7933509638b7e85f6ea3b.png

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值