文章目录

  • 存储过程的介绍
  • 变量的应用
  • 创建存储过程和使用存储过程
  • 创建复合结构的存储过程
  • 存储过程与函数的区别

存储过程的介绍

  • 存储过程是SQL语句和流程控制语句的预编集合,并以一个名称存储并作为一个单元进行处理
  • 单一的存储过程效率比单一的SQL语句高,因为存储过程进行了预编译,而SQL语句要进行语法分析

变量的应用

MySQL存储过程中的参数主要有局部参数和会话参数两种,这两种又可以被称为局部变量和会话变量。局部变量只在定义该局部变量的begin…end范围内有效,会话变量在整个存储过程范围内均有效

局部变量

  • 局部变量以关键字DECLARE声明,后跟变量名和变量类型

DECLARE var_name [, varname2, varname3 …] date_type [DEFAULT value];
例:DECARE num INT DEFAULE 10;

在该例中,分别在内层和外层BEGIN…END块中都定义同名的变量x,按照语句从上到下执行的顺序,如果变量x在整个程序中都有效,则最终结果应该都为inner,但真正的输出结果却不同,这说明在内部BEGIN…END块中定义的变量只在该块内有效

全局变量/会话变量

  • MySQL中的会话变量不必声明既可以使用,会话变量在整个过程中有效,会话变量名以字符“@”作为起始字符

分别在内部和外部BEGIN…END块中都定义了同名的会话变量@t,并且最终输出结果相同,从而说明会话变量的作用范围为整个程序

为变量赋值

  • 定义变量后,通过赋值可以改变变量的默认值
  • 两种赋值方式:

SET var_name = expr [, var_name = expr, …];

例:SET num = 100;

SELECT col_name [, … ] INTO var_name [, … ] table_expr;

例:SELECT store INTO num from bookinfo;//将查询结果赋值给变量


上述赋值语句必须存在于创建的存储过程中,且需将赋值语句放置在BEGIN…END之间。若脱离此范围,该变量将不能使用或被赋值

创建存储过程和使用存储过程

存储过程的语法结构:

CREATE PROCEDURE proc_name([proc_parameter[ … ]])
[characteristic … ] routine_body

  • proc_name : 存储过程的名称
  • proc_parameter : 指定存储过程参数列表形式如:
  • proc_parameter中的参数由3部分组成,它们分别是输入输出型、参数名称和参数类型。其中形式为**[IN | OUT |INOUT] param_name type**。其中,IN:输入参数,表示该参数的值必须在调用存储过程时指定;OUT:输出参数,表示该参数的值可以被存储过程改变,并且可以返回;INOUT:既可以输入也可以输出,表示该参数的调用时指定,并且可以被改变和返回;param_name参数时存储过程参数名称;type表示指定存储过程的参数类型,该类型可以为MySQL数据库的任意数据类型。
  • characteristic :参数指定存储过程的特性
  • routine_body : 过程体     过程体由合法的SQL语句构成;过程体可以是任意SQL语句;过程体如果为复合结构则使用BEGIN…END语句;复合结构可以包含声明,流程控制语句;
  • MySQL存储过程名称不区分大小写
  • MySQL语句默认的结束符为分号“;”,而且存储过程和函数内的SQL语句需要分号来结束。为了避免冲突,首先用“delimiter //” 将MySQL的结束符设置为//,最后再用“delimiter ;” 来将结束符恢复成分号。更改结束标识可以用关键字delimiter定义

调用存储过程

CALL proc_name([parameter [, …]])
CALL proc_name[()];

创建无参的存储过程
需求:创建查询图书编号、书名、图书类别的存储过程

创建带有输入参数和输出参数的存储过程
需求:设计一个存储过程,删除一个读者,并输出剩余读者的个数

创建带有输入输出参数的存储过程
需求:设计一个存储过程,实现交换两个数的处理*

删除存储过程

  • 语法结构

DROP PROCEDURE [IF EXISTS] proc_name;

创建复合结构的存储过程

使用条件判断语句的存储过程
需求:设计比较两个数大小的存储过程

使用循环控制语句的存储过程
需求:设计一个存储过程,向数据表插入100条数据的存储过程

存储过程与函数的区别

功能上的区别

  • 存储过程:一般来说,存储过程实现的功能要复杂一点。功能强大,可以执行包括修改表等一系列数据库操作
  • 存储函数:实现的功能针对性比较强

返回值上的不同

  • 存储过程:可以返回多个值,也可以不返回值,只是实现某种效果或工作
  • 存储函数:必须有返回值,而且只能有一个返回值

参数的不同

  • 存储过程:存储过程的参数类型有三种:IN、OUT、INOUT
  • 存储函数:参数类型只有一种,类似于IN参数。调用函数时需要按照参数的类型指定值即可

语法结构上的不同

  • 存储过程:存储过程声明时不需要指定返回类型
  • 存储函数:函数声明时需要指定返回类型,且在函数体中必须包含一个有效的RETURN语句

调用方式上的不同

  • 存储过程:一般是作为一个独立的部分来执行,用CALL语句进行调用
  • 存储函数:嵌入在SQL中使用,可以在select中调用

MySQL_存储过程相关推荐

  1. MySQL5_存储过程-sql编程-函数-触发器-用户管理

    文章目录 MySQL_存储过程-sql编程-函数-触发器-用户管理 建立表 1.存储过程(procedure) (1)创建存储过程 (2)参数的类别 (3)删除存储过程 (4)查看存储过程的信息 (5 ...

  2. sybase asa转mysql_为Sybase ASA创建外部存储过程(Java示例)

    下面介绍一个简单的示例,来创建一个基于Java 的ASA存储过程, 数据库(ASA11.0或以上版本), 该示例很简单,输入主机名,返回对应的 衡量一个DBMS的功能是否强大,外部存储过程是否很方便创 ...

  3. 易语言 存储过程 mysql_在易语言中调用MS SQL SERVER数据库存储过程(Transact-SQL)方法总结...

    作者:liigo 日期:2010/8/25 Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接 ...

  4. jdbc存储过程mysql_使用JDBC操作存储过程

    使用JDBC操作存储过程,可以借助于一个借口CallableStatement实现. 此时调用存储过程的sql语句为:{call procedure_name [(arg1),(arg2)]} 而Ca ...

  5. powershell写mysql_使用Powershell对MySql运行MySql存储过程脚本

    我想在一个QA环境的MySQL 5.6服务器上执行一个MySQL存储过程.这是通过Azure piplines实现的持续交付的一部分. .sql 文件有多个存储过程,MySQL Workbench成功 ...

  6. 易语言 存储过程 mysql_在易语言中调用MS SQL SERVER数据库存储过程方法总结

    五.调用"直接返回(return)一个值"的存储过程 此类返回值相当于易语言子程序的返回值,是在存储过程代码内部使用 return 指令返回的.欲得到这个返回值,稍微有点麻烦,且看 ...

  7. 积分签到mysql_积分获取和消费的存储过程

    1.GM_JF客户账户积分表 2.GM_JF_DETAIL客户账户积分消费记录 3.GM_JF_ACTION_RULES积分动作规则表 4.GM_JF_GOODS_RULES积分商品规则表 无 -- ...

  8. MySQL——创建存储过程和函数

    简单地说,存储过程就是一条或多条  SQL  语句的集合,可视为批文件,但是其作用不仅限于批处理.存储程序可以分为存储过程和函数.存储过程要用 CALL  语句来调用,并且只能用输出变量返回值. 1. ...

  9. hql调用mysql存储过程_hibernate调用mysql存储过程

    在mysql中创建两个存储过程,如下: 1.根据id查找某条数据: 1 CREATE PROCEDURE `findEmpById`(IN id INTEGER(11))2 begin3      s ...

最新文章

  1. Visual Studio c++必要的背景知识--链接与编译
  2. Oracle真实世界数据链——将现实世界和区块链世界相互打通——让主流币爆涨十倍的项目
  3. Redis几个认识误区
  4. 线程:synchronized
  5. 革命离成功还非常非常远,我还不怎么努力
  6. HTML5法律律师咨询公司响应式模板
  7. Django 后台带有字典的列表数据与页面js交互
  8. 10.傅里叶变换——2D中的傅里叶变换,傅里叶变换的应用_5
  9. 发展前景好的互联网技术方面,你觉得比较适合女孩子的都有哪些啊?
  10. [转载] Java中自定义异常的声明与处理
  11. spring中用到了哪些设计模式
  12. html中最小规格字体,font-size【CSS 字体大小】文字大小尺寸
  13. python外贸应用_Python脚本+Sublime免费查询阿里巴巴国际站产品排名
  14. 世界500强榜单出炉:中国公司首进三强 沃尔玛居首
  15. 考研高等数学公式总结(一)
  16. java awt canvas_java.awt 类 Canvas - Java 中文参考手册
  17. Longhorn时代,浏览器的终结?——关于Avalon和XAML
  18. 域名批量查询 网站域名批量查询
  19. schannel: next InitializeSecurityContext failed: SEC_E_ILLEGAL_MESSAGE (0x80090326)
  20. EventLog Analyzer:功能丰富的事件日志管理软件

热门文章

  1. python3和php7哪个好_性能是Flask的3倍!比PHP7还快!这个Python框架你值得拥有!
  2. python正确打开方式_Python log 的正确打开方式
  3. 「雕爷学编程」Arduino动手做(22)——8X8 LED点阵MAX7219屏
  4. redis 系列7 数据结构之跳跃表
  5. 如何在 CentOS 中设置 NTP 服务器
  6. [swustoj 771] 奶牛农场
  7. HappyLeetcode37:Add Binary
  8. 解决firefox的button按钮文字不能垂直居中
  9. 学习cluster技术
  10. 华为lab-rs-v1-2.9_OSPF区域34