编写mysql存储过程
文章目录
- 一、存储过程定义
- 二、存储过程特点
- 三、存储过程语法
- 四、定义变量
- 五、流程控制语句
- 1、条件控制语句
- 1、IF语句
- 2、case语句
- 2、循环控制语句
- 1、while语句
- 2、repeat
- 3、loop语句
- 4、leave语句
- 5、iterate
一、存储过程定义
存储过程(Stored Procedure):一组为了完成特定功能的SQL语句集,存储在数据库中,经过一次编译后不需要再次编译。
二、存储过程特点
1、可以完成复杂的判断和运算
2、执行速度快
3、可重复使用
4、减少网络之间的数据传输,节省开销
通过代码调用存储过程时只需要传存储过程名称以及所需参数即可
三、存储过程语法
1、创建
delimiter $$ --定义存储过程结束标记,可自定义
--创建 使用procedure
create procedure [procedure_name]([param_type][param_name][data_type],...)
begin[存储体];--分号不可少
end $$
delimiter;-- 创建存储过程示例
delimiter $$
create procedure getUserById(in userId int)
beginselect * from tb_user where user_id=userId;
end $$
delimiter;
delimiter:表示sql语句执行的结束
参数类型说明:param_type[in|out|inout]
- IN:表示调用者需要对存储过程传入参数。
- OUT:表示调用者到一个或多个返回值。
- INOUT:表示调用者既要传入值,又要传出值。
2、删除
-- 删除procedure
drop procedure if exists [procedure_name];-- 示例
drop procedure if exists getUserById;
3、调用
-- 无参
call procedure_name();
-- 有参
call procedure_name(param1,param2,...)
四、定义变量
变量声明语句必须放在存储体的开始部分
-- 定义变量 declare
-- 语法
-- declare [declare_name][type][default_value(可选)]
declare userId int default 66;
declare userId int;
-- 变量赋值
-- set declare_name=new_value;
set userId=77;
五、流程控制语句
1、条件控制语句
1、IF语句
语法
IF search_condition_1 THEN statement_list_1[ELSEIF search_condition_2 THEN statement_list_2] ...[ELSE statement_list_n]
END IF
实例
DROP PROCEDURE IF EXISTS get_max_num ;DELIMITER $$
CREATE PROCEDURE get_max_num (IN a INT, IN b INT, OUT c)
BEGINIF a>b THEN set c = a ;ELSE set c = b;END IF ;END $$
DELIMITER ;SELECT @a;
CALL get_max_num(3,4);
SELECT @a;
2、case语句
存储程序的CASE语句实现一个复杂的条件构造。如果search_condition 求值为真,相应的SQL被执行。如果没有搜索条件匹配,在ELSE子句里的语句被执行
语法
CASE case_valueWHEN when_value THEN statement_list[WHEN when_value THEN statement_list] ...[ELSE statement_list]
END CASE
Or: CASEWHEN search_condition THEN statement_list[WHEN search_condition THEN statement_list] ...[ELSE statement_list]
END CASE
实例
-- case 语句的使用
DROP PROCEDURE test_case;DELIMITER $$
CREATE PROCEDURE test_case (IN param INT)
BEGINDECLARE result VARCHAR (10) ;CASE param WHEN param = 1 THEN SET result = "星期一" ;WHEN param = 2 THEN SET result = "星期二" ;WHEN param = 3 THEN SET result = "星期三" ;ELSE SET result = "error";END CASE ;SELECT result AS "星期" ;
END $$
DELIMITER ;CALL test_case(11);
2、循环控制语句
1、while语句
WHILE语句内的语句或语句群被重复,直至search_condition 为真。
WHILE语句可以被标注。 除非begin_label也存在,end_label才能被用,如果两者都存在,它们必须是一样的
先判断,后执行
语法
[begin_label:] WHILE search_condition DOstatement_list
END WHILE [end_label]
实例
-- while语句
DROP PROCEDURE IF EXISTS test_while;
DELIMITER $$CREATE PROCEDURE test_while (IN a INT)
BEGINDECLARE param INT DEFAULT 5 ;SET param=a;SELECT "yyyy";WHILEparam > 0 DO SELECT param ;SET param = param - 1 ;END WHILE ;END $$
DELIMITER ;
2、repeat
REPEAT语句内的语句或语句群被重复,直至search_condition 为真。
先执行,后判断
语法
[begin_label:] REPEATstatement_list
UNTIL search_condition
END REPEAT [end_label]
实例
-- repeat语句
DROP PROCEDURE IF EXISTS test_repeat;
DELIMITER $$
CREATE PROCEDURE test_repeat(IN param INT)
BEGINSET @param=1;REPEAT SET @param=@param+1;SELECT @param;UNTIL @param>paramEND REPEAT;
END $$
DELIMITER;CALL test_repeat(2)
3、loop语句
LOOP允许某特定语句或语句群的重复执行,实现一个简单的循环构造。在循环内的语句一直重复直循环被退出,退出通常伴随着一个LEAVE 语句。
LOOP语句可以被标注。除非begin_label存在,否则end_label不能被给出,并且如果两者都出现,它们必须是同样的。
语法
[begin_label:] LOOPstatement_list
END LOOP [end_label]
实例
-- loop语句
DROP PROCEDURE test_loop;
DELIMITER$$
CREATE PROCEDURE test_loop (IN param INT)
BEGINf_loop :LOOPIF param < 1 THEN LEAVE f_loop ;ELSE SET param = param - 1 ;SELECT param ;END IF ;END LOOP f_loop ;
END $$DELIMITER;
CALL test_loop(4);
4、leave语句
这个语句被用来退出任何被标注的流程控制构造。它和BEGIN … END或循环一起被使用
5、iterate
ITERATE只可以出现在LOOP, REPEAT, 和WHILE语句内。ITERATE意思为:“再次循环。”
CREATE PROCEDURE doiterate(p1 INT)
BEGINlabel1: LOOPSET p1 = p1 + 1;IF p1 < 10 THEN ITERATE label1; END IF;LEAVE label1;END LOOP label1;SET @x = p1;
END
编写mysql存储过程相关推荐
- mysql存储过程select into_mysql存储过程select into
mysql数据库存储过程 存储过程简介 存储过程可以简单理解为一条或者多条sql语句的集合,存储过程用来实现将一组关于表的操作的sql语句当作一个整体来执行,存储过程在实际应用中最主要的特点的事提高执 ...
- mysql 存储过程 控制台_mysql 存储过程 调试
mysql存储过程之游标遍历数据表 原文:mysql存储过程之游标遍历数据表 今天写一个mysql存储过程,根据自己的需求要遍历一个数据表,因为对存储过程用的不多,语法不甚熟悉,加之存储过程没有调试环 ...
- mysql存储过程Case not found for CASE statement处理
今天在编写mysql存储过程时,遇到Case not found for CASE statement错误,网上百度了一下,大概原因是由于case语句没有找到对应分支而且又没有else导致的报错(存储 ...
- mysql存储过程编写
2019独角兽企业重金招聘Python工程师标准>>> 记录一下自己写的一个mysql存储过程,在游标方面和oracle有些不一样,mysql是使用一个HANDLER来处理数据读取完 ...
- MySQL存储过程详解
1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储 ...
- MySQL 存储过程初研究
最近在做一个移动设备多类型登录的统一用户系统.其中记录用户资料的部分,因为涉及到更换设备的相同用户.同一个用户多类型同时具备的情况,所以想分辨出尽量少的用户去合理记录,就需要多次查询.于是决定研究一下 ...
- Mysql学习总结(11)——MySql存储过程与函数
2019独角兽企业重金招聘Python工程师标准>>> 摘要:存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程 ...
- MySQL存储过程详解 mysql 存储过程
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...
- mysql存储过程详解[转]
mysql存储过程详解[转] 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功 ...
最新文章
- 史上最完整的Maven 教程
- MySQL关于事务控制、视图、存储过程和函数
- python标准库和第三方库_python常用标准库及三方库
- 设计模式——UML图
- lstm 输入数据维度_LSTM 股票市场预测入门
- 什么从什么写短句_新年新气象跨年了,准备好发什么说说了吗
- IPv6与IPv4比较
- 检测到在集成的托管管道模式下不适用的ASP.NET设置
- 删除exchange误发邮件
- JAVA打开PDF文件
- 百合佳缘伐谋、珍爱网伐交、伊对伐兵
- MFC简易音乐播放器
- 用户画像构建方法调研和初步解决方案
- 让你的工作事半功倍的语音转文字转换器
- 7 层 OSI 模型
- 马里兰大学计算机世界排名,2019上海软科世界一流学科排名计算机科学与工程专业排名马里兰大学帕克分校排名第38...
- Webfrom --中国直辖市三区联动
- 驾校招生报名预约学车小程序开发制作
- javaweb基于ssm招投标管理系统设计与实现.rar(项目源码+数据库文件)
- Shopee卖家该如何选择类目?
热门文章
- 软件开发测试的5个部分
- CSAPP LAB Binary bombs实验报告
- Python安装Pillow时出现The headers or library files could not be found for zlib/jpeg错误
- python kfold交叉验证_KFold交叉验证
- iOS支付宝、微信支付
- java 多线程分段等待执行完成状况,循环屏障CyclicBarrier | Java工具类
- Ant 中的一些命令
- 前端React项目中实现萤石云ezuikit摄像头的播放与控制
- MathType中的四则运算符号该怎样进行输入
- 长征二号超级计算机,厉害了,我们的计算机!