十三、MySQL存储过程相关知识总结 + 案例讲解(强化)

一、存储过程VS函数

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

二、存储过程

含义:一组预先编译好的SQL语句的集合,理解成批处理语句

1、提高代码的重用性
2、简化操作
3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

(一)创建语法

CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
存储过程体(一组合法的SQL语句)
END

注意

  1. 参数列表包含三部分
    参数模式 参数名 参数类型
    举例:
    in stuname varchar(20)

参数模式:
in:该参数可以作为输入,也就是该参数需要调用方传入值
out:该参数可以作为输出,也就是该参数可以作为返回值
inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

  1. 如果存储过程体仅仅只有一句话,begin end可以省略
    存储过程体中的每条sql语句的结尾要求必须加分号
    存储过程的结尾可以使用 delimiter 重新设置
    语法:
    delimiter 结束标记
    案例:
    delimiter $
(二)调用语法

CALL 存储过程名(实参列表);

案例演示

  1. 空参列表
# 案例:插入到admin表中五条记录
SELECT * FROM admin;
DELIMITER $
CREATE PROCEDURE myp1()
BEGININSERT INTO admin(username,`password`) VALUES('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000');
END $
#调用
CALL myp1()$
  1. 创建带in模式参数的存储过程
#案例1:创建存储过程实现 根据女神名,查询对应的男神信息CREATE PROCEDURE myp2(IN beautyName VARCHAR(20))
BEGINSELECT bo.*FROM boys boRIGHT JOIN beauty b ON bo.id = b.boyfriend_idWHERE b.name=beautyName;END $#调用
CALL myp2('柳岩')$

案例2 :创建存储过程实现,用户是否登录成功

CREATE PROCEDURE myp4(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))
BEGINDECLARE result INT DEFAULT 0;#声明并初始化SELECT COUNT(*) INTO result#赋值FROM adminWHERE admin.username = usernameAND admin.password = PASSWORD;SELECT IF(result>0,'成功','失败');#使用
END $#调用
CALL myp3('张飞','8888')$

3.创建out 模式参数的存储过程

#案例1:根据输入的女神名,返回对应的男神名CREATE PROCEDURE myp6(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20))
BEGINSELECT bo.boyname INTO boynameFROM boys boRIGHT JOINbeauty b ON b.boyfriend_id = bo.idWHERE b.name=beautyName ;END $#案例2:根据输入的女神名,返回对应的男神名和魅力值CREATE PROCEDURE myp7(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT usercp INT) 
BEGINSELECT boys.boyname ,boys.usercp INTO boyname,usercpFROM boys RIGHT JOINbeauty b ON b.boyfriend_id = boys.idWHERE b.name=beautyName ;END $#调用
CALL myp7('小昭',@name,@cp)$
SELECT @name,@cp$

4.创建带inout模式参数的存储过程

#案例1:传入a和b两个值,最终a和b都翻倍并返回CREATE PROCEDURE myp8(INOUT a INT ,INOUT b INT)
BEGINSET a=a*2;SET b=b*2;
END $#调用
SET @m=10$
SET @n=20$
CALL myp8(@m,@n)$
SELECT @m,@n$
(三)删除存储过程

语法:drop procedure 存储过程名
DROP PROCEDURE p1;
DROP PROCEDURE p2,p3;#×

(四)查看存储过程的信息

DESC myp2;×
SHOW CREATE PROCEDURE myp2;

(五)修改存储过程(X)

无法对存储过程进行修改,只能通过先删除存储过程再新增存储过程的方法来间接实现修改!

三、存储过程案例讲解

#一、创建存储过程实现传入用户名和密码,插入到admin表中CREATE PROCEDURE test_pro1(IN username VARCHAR(20),IN loginPwd VARCHAR(20))
BEGININSERT INTO admin(admin.username,PASSWORD)VALUES(username,loginpwd);
END $
#二、创建存储过程实现传入女神编号,返回女神名称和女神电话CREATE PROCEDURE test_pro2(IN id INT,OUT NAME VARCHAR(20),OUT phone VARCHAR(20))BEGINSELECT b.name ,b.phone INTO NAME,phoneFROM beauty bWHERE b.id = id;END $
#三、创建存储存储过程或函数实现传入两个女神生日,返回大小CREATE PROCEDURE test_pro3(IN birth1 DATETIME,IN birth2 DATETIME,OUT result INT)
BEGINSELECT DATEDIFF(birth1,birth2) INTO result;
END $
#四、创建存储过程或函数实现传入一个日期,格式化成xx年xx月xx日并返回
CREATE PROCEDURE test_pro4(IN mydate DATETIME,OUT strDate VARCHAR(50))
BEGINSELECT DATE_FORMAT(mydate,'%y年%m月%d日') INTO strDate;
END $CALL test_pro4(NOW(),@str)$
SELECT @str $
#五、创建存储过程或函数实现传入女神名称,返回:女神 and 男神  格式的字符串
如 传入 :小昭
返回: 小昭 AND 张无忌
DROP PROCEDURE test_pro5 $
CREATE PROCEDURE test_pro5(IN beautyName VARCHAR(20),OUT str VARCHAR(50))
BEGINSELECT CONCAT(beautyName,' and ',IFNULL(boyName,'null')) INTO strFROM boys boRIGHT JOIN beauty b ON b.boyfriend_id = bo.idWHERE b.name=beautyName;
END $CALL test_pro5('柳岩',@str)$
SELECT @str $
#六、创建存储过程或函数,根据传入的条目数和起始索引,查询beauty表的记录
DROP PROCEDURE test_pro6$
CREATE PROCEDURE test_pro6(IN startIndex INT,IN size INT)
BEGINSELECT * FROM beauty LIMIT startIndex,size;
END $CALL test_pro6(3,5)$

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 2169. 得到 0 的操作数

文章目录1. 题目2. 解题1. 题目 给你两个 非负 整数 num1 和 num2 。 每一步 操作 中,如果 num1 > num2 ,你必须用 num1 减 num2 ; 否则,你必须用 num2 减 num1 。 例如,num1 5 且 num2 4 ,应该用 …

阿里云 腾讯云 服务器挂载数据盘

在默认拥有的腾讯云服务器是没有额外的数据盘的,默认Linux只有8GB系统盘,一般的网站也足够使用,如果额外购买的数据盘安装系统之后根据不同的面板、系统的路径问题可能不会自动加载到指定的数据盘目录,需要我们手工进行加载数据盘…

LeetCode 2171. 拿出最少数目的魔法豆(排序)

文章目录1. 题目2. 解题1. 题目 给你一个 正 整数数组 beans ,其中每个整数表示一个袋子里装的魔法豆的数目。 请你从每个袋子中 拿出 一些豆子(也可以 不拿出),使得剩下的 非空 袋子中(即 至少 还有 一颗 魔法豆的袋…

十四、MySQL函数相关知识总结(简单易懂)

函数 含义:一组预先编译好的SQL语句的集合,理解成批处理语句 提高代码的重用性简化操作减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 区别: 存储过程:可以有0个返回,也可以有多个返回…

linux tar order

http://blog.csdn.net/imyang2007/article/details/7634470 把常用的tar解压命令总结下,当作备忘: tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是…

LeetCode 2176. 统计数组中相等且可以被整除的数对

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 k &#xff0c;请你返回满足 0 < i < j < n &#xff0c;nums[i] nums[j] 且 (i * j) 能被 k 整除的数对 (i, j) 的 数目 。 示例 1&#xff1a; 输入&#xff1a;nums …

Web框架——Flask系列之Jinja2模板引擎(二)

Jinja2模板引擎简介 一、Jinja2模板概述 用来展示数据的html页面,这个过程也通常称为渲染,属于Jinja2的功能 使用模板的好处&#xff1a; 视图函数只负责业务逻辑和数据处理(业务逻辑方面)而模板则取到视图函数的数据结果进行展示(视图展示方面)代码结构清晰&#xff0c;耦合…

LeetCode 2177. 找到和为给定整数的三个连续整数

文章目录1. 题目2. 解题1. 题目 给你一个整数 num &#xff0c;请你返回三个连续的整数&#xff0c;它们的 和 为 num 。 如果 num 无法被表示成三个连续整数的和&#xff0c;请你返回一个 空 数组。 示例 1&#xff1a; 输入&#xff1a;num 33 输出&#xff1a;[10,11,12]…

final个人阅读作业

一、软件工程M1/M2总结 1、M1阶段总结&#xff1a; 我们团队的软件工程开发是按照前后端来分别开发的&#xff0c;我是负责后端的。我们的项目是做一个北航的社团平台&#xff0c;是一个网站。在后端我们使用的是ruby on rails。一开始对于ruby是没有什么经验的&#xff0c;因为…

Web框架——Flask系列之Jinja2自带过滤器(三)

一.过滤器概述 过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值&#xff0c;我们还需要修改变量的显示&#xff0c;甚至格式化、运算等等&#xff0c;而在模板中是不能直接调用 Python 中的某些方法&#xff0c;那么这就用到了过滤器。 二.两种过滤器 2.1字符串…

LeetCode 2178. 拆分成最多数目的偶整数之和(等差数列求和)

文章目录1. 题目2. 解题1. 题目 给你一个整数 finalSum 。请你将它拆分成若干个 互不相同 的偶整数之和&#xff0c;且拆分出来的偶整数数目 最多 。 比方说&#xff0c;给你 finalSum 12 &#xff0c;那么这些拆分是 符合要求 的&#xff08;互不相同的偶整数且和为 finalS…

Web框架——Flask系列之CSRFToken详解(四)

CSRF(理解) 一. 什么是CSRFToken? CSRF全拼为Cross Site Request Forgery&#xff0c;译为跨站请求伪造。CSRF指攻击者盗用了你的身份&#xff0c;以你的名义发送恶意请求。 包括&#xff1a;以你名义发送邮件&#xff0c;发消息&#xff0c;盗取你的账号&#xff0c;甚至于…

apache ab test使用 单独安装ab和htpasswd

apache ab test使用 apache ab test使用 单独安装ab和htpasswd 转载自&#xff1a; http://www.cnblogs.com/super-d2/p/3831155.html#top http://blog.chinaunix.net/uid-20382003-id-3032167.html 注意&#xff1a;ab test是不支持长连接压测的&#xff0c;只支持短连接压测 …

LeetCode 2180. 统计各位数字之和为偶数的整数个数

文章目录1. 题目2. 解题1. 题目 给你一个正整数 num &#xff0c;请你统计并返回 小于或等于 num 且各位数字之和为 偶数 的正整数的数目。 正整数的 各位数字之和 是其所有位上的对应数字相加的结果。 示例 1&#xff1a; 输入&#xff1a;num 4 输出&#xff1a;2 解释&a…

Web框架——Flask系列之自定义过滤器详解(五)

一.为什么要自定义过滤器 过滤器的本质是函数。当模板内置的过滤器不能满足需求&#xff0c;可以自定义过滤器。 二.自定义过滤器两种方式 方式一 先定义函数后添加到过滤器列表,app.add_template_filter(‘函数名’,‘过滤器名称’) def do_listreverse(li):# 通过原列表…

【BZOJ 3191】[JLOI2013]卡牌游戏

注意 最后一个没有空格&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 题解(摘自网络) 有一个很重要的性质&#xff1a;当前人获胜的概率只与其在排列中与庄家的相对位置和人数有关、、跟具体有哪些人无关、、 那么我们可以用f[i][j]表示还有i人时从庄家开始数…

LeetCode 2181. 合并零之间的节点(链表)

文章目录1. 题目2. 解题1. 题目 给你一个链表的头节点 head &#xff0c;该链表包含由 0 分隔开的一连串整数。 链表的 开端 和 末尾 的节点都满足 Node.val 0 。 对于每两个相邻的 0 &#xff0c;请你将它们之间的所有节点合并成一个节点&#xff0c;其值是所有已合并节点的…

Web框架——Flask系列之模板使用练习(六)

一、实现的效果如下: 二、实现要求&#xff1a; 给定如下5条数据,只显示4行数据&#xff0c;背景颜色依次为&#xff1a;黄&#xff0c;绿&#xff0c;红&#xff0c;紫 my_list [{"id": 1,"value": "我爱工作"},{"id": 2,"va…

Android安全研究经验谈

安全研究做什么从攻击角度举例&#xff0c;可以是&#xff1a;对某个模块进行漏洞挖掘的方法&#xff0c;对某个漏洞进行利用的技术&#xff0c;通过逆向工程破解程序、解密数据&#xff0c;对系统或应用进行感染、劫持等破坏安全性的攻击技术等。而防御上则是&#xff1a;查杀…

LeetCode 2182. 构造限制重复的字符串(贪心、map)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s 和一个整数 repeatLimit &#xff0c;用 s 中的字符构造一个新字符串 repeatLimitedString &#xff0c;使任何字母 连续 出现的次数都不超过 repeatLimit 次。你不必使用 s 中的全部字符。 返回 字典序最大的 repeatLimited…