MySQL数据库存储过程
- 存储过程相关命令汇总
- 存储过程
- 存储过程优化
- 再说存储过程的输出参数
- 再说WHILE 和 REPEAT循环
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
——百度百科
如图所示,在普通模式下获取数据,用户需要输入SQL命令与数据库进行交互,而存储过程是编写好的SQL命令,存储在数据库中,用户操作的时候只需要调用存储过程,而不用重新输入冗余繁杂的SQL命令。因此
- 存储过程有什么优点?
1.存储过程可以重复使用,大大减小开发人员的负担;
2.对于网络上的服务器,可以大大减小网络流量,因为只需要传递存储过程的名称即可;
3,可以防止对表的直接访问,只需要赋予用户存储过程的访问权限。
0 存储过程相关命令汇总
操作 | SQL命令 |
---|---|
创建存储过程 |
CREATE PROCEDURE 存储过程名(参数种类1 参数1 数据类型1,[...] BEGIN 具体的procedure(处理) END
|
查看数据库中的存储过程 |
SHOW PROCEDURE STATUS\G
|
查看具体的存储过程 |
SHOW CREATE PROCEDURE 存储过程名\G
|
调用(执行)存储过程 |
CALL 存储过程名(参数1,...);
|
删除存储过程 |
DROP PROCEDURE 存储过程名
|
变量声明 |
DECLARE 变量名 数据类型;
|
变量赋值 |
SET 变量名= ;
|
1 存储过程
1.1 创建存储过程 CREATE PROCEDURE
创建存储过程的命令是:
>CREATE PROCEDURE 存储过程名(参数种类1 参数1 数据类型1,[...])BEGIN具体的procedure(处理)END
- 1)存储过程中具体的处理类容放在 BEGIN和END BEGIN 和 END 之间;
- 2)存储过程需要制定参数,包括种类( IN,OUT,INOUT IN ,OUT,INOUT,分别代表输入参数,输出参数和即是输入也是输出的参数),参数名和数据类型。【和函数不同,函数指定输入参数即可】
eg:创建一个对表customer的姓名(nam)进行模糊检索,命名为sp_search_customer。
对于上图创建PROCEDURE的几点说明:
①>DELIMITER //
表示给变分隔符,默认分隔符是;
,否则存储过程中含有;
,MySQL监视器无法分辨。(最后将分隔符改回来)
②存储过程( BEGIN和END BEGIN 和 END 之间)的具体处理内容,主要包括条件、case,循环。
分类 | SQL命令 |
---|---|
简单条件 |
IF cond1 THEN exp1 ELSEIF cond2 THEN exp2 ELSE expelse END IF |
case |
CASE 表达式 WHEN 值1 THEN … WHEN …THEN… ELSE … END CASE |
循环(后置判断) |
REPEAT … UNTIL …END REPEAT |
循环(前置判断) |
WHILE … DO … END WHILE |
**1.2 查看存储过程** 查看数据库中是否存在存储过程:
>SHOW PROCEDURE STATUS\G
查看存储过程的具体信息:
>SHOW CREATE PROCEDURE 存储过程名\G
eg:查看存储过程sp_search_customer
1.3 执行存储过程 CALL
调用存储过程使用CALL 存储过程名
命令,具体如下:
CALL 存储过程名(参数,...)
eg:通过创建好的存储过程sp_search_cusotmer来执行存储过程:
检索‘王’姓顾客:
>CALL sp_search_customer('王%');
检索所有顾客:
>CALL sp_search_customer('');
1.4 删除存储过程 DROP PROCEDURE
删除存储过程使用命令:
DROP PROCEDURE 存储过程名;
2 存储过程优化
(1)使用if条件语句创建存储过程
可以看到,上述条件语句部分的结构大致都为:
IF... THEN
SELECT...;
ELSEIF ...THEN
SELECT...;
ELSEIF...THEN
SELECT...;
ELSE
SELECT...;
其中的语句具有较高的重复性和冗余性,因此比较繁琐,如果我们用CASE替代呢?
(2)CASE命令的多重分支
使用CASE来创建多重分支:
p_dapart
放到CASE之后,一个p_dapart
取代了多个p_dapart
,因此使用CASE代码在判断语句处显得简洁一些,如果通过定义变量的形式呢?
(3)定义本地变量
存储过程中定义的变量,被称为本地变量,对程序设计语言有所了解的知道这是一个局部变量。数据库中,
声明局部变量的命令:
>DECLARE 变量名 数据类型 [初始值...]
给变量赋值的命令:
>SET 变量名=
,在创建procedure过程中顶一个本地变量tem:
可以看到,这种方式大大地简化了代码的冗余性和重复性。
3 再说存储过程的输出参数
在创建存储过程的时候,如果制定了 OUT护着INOUT OUT护着INOUT,在调用存储过程时请在输出参数前面加上 @ @,这样结果将保存到“@变量名“中。
eg:创建一个计算阶乘的存储过程:
最终的结果将保存到“@res“之中,如上图所示。
- 请注意,用WHILEWHILE循环创建的计算阶乘的存储过程, !5=120,!0=1 !5=120,!0=1,结果是正确的。先记住这句话,接下来看下用REPEAT创建同样的阶乘计算的存储过程。
4 再说WHILE 和 REPEAT循环
我们使用repeat创建一个计算阶乘的存储过程:
接下来看下同样计算 !5和!0 !5和!0结果如何?
可以看到!5=120的结果正确,但是!0得到的结果为0,不为1。这是什么原因呢?
问题出在WHILE是前置判断,是先验的,先验证WHILE后面的条件是否成立,为TRUE则继续执行,若FALSE则结束循环;
而REPEAT是后置判断,是后验的,不管三七二十一先执行语句,然后验证UNTIL后面的条件语句是否成立,不成立则结束。因此REPEAT循环执行了一次 presult=presult∗pnum,即presult=1∗0 p_result=p_result*p_num,即p_result=1*0。
因此:- WHILE循环是前置判断,先验的循环
- REPEAT循环是后置判断,后验的循环
MySQL数据库存储过程相关推荐
- JDBC对MySQL数据库存储过程的调用
一.MySQL数据库存储过程: 1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完毕特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中.用 ...
- 使用shell脚本调用mysql数据库存储过程,并设置定时任务
本来是要mysql数据库中创建事件任务来,定时执行存储过程,做数据传输的...后来由于种种原因,就使用crontab来定时执行,调用存储过程. 实现这个数据传输分为两步: 第一步:编写shell脚本调 ...
- mysql数据库存储过程及调用方法
mysql数据库存储过程及调用方法 mysql5.0以后就支持存储过程了,目前mysql的6.0Alpha版也已经推出.6.0不仅支持大型数据库如oracle等的绝大部分功 能,如存储过程.视图.触发 ...
- jdbc存储过程mysql_JDBC对MySQL数据库存储过程的调用
1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完成特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中,用户通过指定存储过程的名字并给出参 ...
- Mysql数据库存储过程基本语法讲解
Mysql数据库存储过程基本语法讲解 一般情况下MYSQL以:结尾表示确认输入并执行语句,但在存储过程中:不是表示结束,因此可以用该命令将:号改为//表示确认输入并执行.存储过程如同一门程序设计语言, ...
- MySQL 案例实战--MySQL数据库 存储过程 存储函数
MySQL数据库 存储过程 & 存储函数 前言 一.什么是存储过程 & 存储函数 二.存储过程的创建和调用 三.存储函数的创建和调用 前言 本环境是基于 Centos 7.8 系统构建 ...
- MySQL数据库存储过程讲解与实例
存储过程简介 SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储 ...
- mysql数据库存储过程详解
1.什么是存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数( ...
- MySQL数据库存储过程动态表建立(PREPARE)
PREPARE statement_name FROM sql_text /*定义*/ EXECUTE statement_name [USING variable [,variable...]] / ...
最新文章
- hdu 2594 kmp
- 计算机笔记本电脑加固态硬盘,电脑卡的同学注意了 这些本加SSD也是渣
- 【转贴】Decoda Tutorial LUA调式器
- golang 将word转为pdf_如何将word转化为pdf格式
- iOS imageview图片压缩变形
- layuiadmin上手好难_成功男士的好搭档:松下ES-CV50电动剃须刀上手体验分享
- linux 中断分上下部分的原因
- 关系到了冰点_VIP090:关系到了冰点
- C++模版类List实现
- 达梦数据库管理工具介绍
- 手把手教你绘制最基础的列线图
- bootstrap-入门学习-流体容器与响应式布局容器
- FM1702 13.56MHz RF PCB天线调试经验记录
- 主流的工业以太网简介及比较(EPA , EtherCAT , Ethernet Powerlink , PROFINET, Ethernet/IP, SERCOS III)
- windows消息大全
- UICollectionView教程:重用、选择和排序
- 手把手教你用Arduino接入阿里云物联网平台,ESP8266连接阿里云物联网平台必看教程...
- 第一个项目的cmd代码
- tomcat配置监控界面
- 考研英语(一、二)应用文(小作文)写作模板—中公考研