MySQL存储过程

#存储过程
/*
含义:一组预先编译好的SQL语句的集合,理解成批处理语句
1、提高代码的重用性
2、简化操作
3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

*/

一、创建语法

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

#注意:
/*
1、参数列表包含三部分
参数模式 参数名 参数类型
举例:
in stuname varchar(20)

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

2、如果存储过程体仅仅只有一句话,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()$

2.创建带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 myp3(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 $

#调用

CALL myp5('小昭',@bName)$
SELECT @bName$

#案例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都翻倍并返回

DELIMITER $
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$

5.综合案例

#创建存储过程或函数实现传入女神名称,返回:女神 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 str #这里必须有IFNULL,否则如果没有的话会直接返回nullFROM boys boRIGHT JOIN beauty b ON b.boyfriend_id = bo.idWHERE b.name=beautyName;END $
CALL test_pro5('柳岩',@str)$
SELECT @str $

三、删除存储过程

#语法:drop procedure 存储过程名

DROP PROCEDURE p1;

DROP PROCEDURE p2,p3; #错误,不能删除多个

四、查看存储过程的信息

DESC myp2; # 错误

SHOW CREATE PROCEDURE  myp2;

MySQL存储过程(CREATE PROCEDURE 存储过程名(参数列表))相关推荐

  1. MySQL函数(CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型)

    MySQL函数 /* 含义:一组预先编译好的SQL语句的集合,理解成批处理语句 1.提高代码的重用性 2.简化操作 3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 区别: 存储过程: ...

  2. 创建存储过程create procedure

    创建存储过程create procedure drop procedure if exists test01; delimiter SETAUTOCOMMIT=0SET AUTOCOMMIT = 0S ...

  3. mysql存储过程语法 if_mysql存储过程语法 if

    MySql存储过程 MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程, ...

  4. mysql存储过程call_mysql call 存储过程

    PHP调用MYSQL存储过程实例 PHP调用MYSQL存储过程实例 标签: mysql存储phpsqlquerycmd 2010-09-26 11:10 11552人阅读 评论(3) 收藏 举报 实例 ...

  5. mysql 局域网存储_MySQL 存储过程

    修改定界符 DELIMITER $$ 创建存储过程 CREATE [DEFINER = {user | CURRENT_USER}]    --当前用户,如果省略就是默认用户 PROCEDURE sp ...

  6. mysql基础——变量、存储过程和函数

    目录 一.变量 1.1  基本介绍 1.2  系统变量 1.3  自定义变量 二.存储过程 2.1  基本介绍 2.2  存储过程的创建 2.3  存储过程的删除 2.4  存储过程的查看 2.5  ...

  7. oracle写完存储过程之后,oracle存储过程和自定义函数

    create [or replace] PRocedure 过程名(参数列表) AS PLSQL 子程序体; 存储过程写完之后,要调用这个存储过程; 有两种方法: 1.exec 存储过程名(); 2. ...

  8. MySQL创建存储过程(CREATE PROCEDURE)

    MySQL 存储过程是一些 SQL 语句的集合,比如有的时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中还需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程.下面 ...

  9. 2、MySQL创建存储过程(CREATE PROCEDURE)(函数)

    MySQL 存储过程是一些 SQL 语句的集合,比如有时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程. 编写存 ...

最新文章

  1. 科室鄙视链最底端,居然是这类人
  2. SAP WM 业务部门Unplanned工单消耗导致WM层面单据异常问题之分析
  3. Eclipse编程快捷键
  4. Python统计TXT词云
  5. 为什么大公司一定要使用 DevOps?
  6. 我对架构的理解-概念篇
  7. 数字图像相关(Digital Image Correlation, DIC)中的非线性优化方法(FA-GN与IC-GN)
  8. java tfidf_Hanlp分词实例:Java实现TFIDF算法
  9. openstack tungsten fabric/contrail中虚拟机yum出现could not retrieve 14: curl#7 - “Failed to connect to
  10. win10分辨率设置正确但屏幕却被拉伸了,如何处理
  11. 2022李宏毅第14讲---机器终身学习(Life Long Learning)
  12. postgresql性能分析工具-pgstatpack-2.3.3.1
  13. 【每日最爱一句】2013.07.31
  14. dat文件导入cad画图步骤_准确又高效的读入CAD几何——详解Fluent Meshing导入文件的几种方法...
  15. 冬瓜你只会煮汤吗?其实还能这样吃!
  16. Jquery利用淘宝接口判断手机运营商和归属地
  17. centos8上安装MP-SPDZ
  18. 计算机php开发技术,基于PHP技术的计算机基础考试系统的开发
  19. Ubuntu的音频播放器,视频播放器和其他应用程序选择与配置
  20. 克鲁斯卡尔算法(Kruskal)详解

热门文章

  1. Java笔记:抽象类和接口
  2. 在JSP中使用数据库
  3. 详解项目管理认证(PMP、IPMP、ITPMP、CPMP)
  4. windows server 2012R组策略
  5. 三节锂电池充电管理芯片,IC电路图,BOM物料表
  6. 使用libreswan搭建ipsec点对点隧道 实现两idc内网网段互通
  7. 电路原理图中的“NC“是什么意思?
  8. pomelo mysql_pomelo链接mysql
  9. 「Unity3D」解决2022的PackageManager无法显示官方插件Burst和Collections的最新版本
  10. 如何设计一个基于SSM的旅游网站管理系统