MySQL_存储过程
文章目录
- 存储过程的介绍
- 变量的应用
- 创建存储过程和使用存储过程
- 创建复合结构的存储过程
- 存储过程与函数的区别
存储过程的介绍
- 存储过程是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_存储过程相关推荐
- MySQL5_存储过程-sql编程-函数-触发器-用户管理
文章目录 MySQL_存储过程-sql编程-函数-触发器-用户管理 建立表 1.存储过程(procedure) (1)创建存储过程 (2)参数的类别 (3)删除存储过程 (4)查看存储过程的信息 (5 ...
- sybase asa转mysql_为Sybase ASA创建外部存储过程(Java示例)
下面介绍一个简单的示例,来创建一个基于Java 的ASA存储过程, 数据库(ASA11.0或以上版本), 该示例很简单,输入主机名,返回对应的 衡量一个DBMS的功能是否强大,外部存储过程是否很方便创 ...
- 易语言 存储过程 mysql_在易语言中调用MS SQL SERVER数据库存储过程(Transact-SQL)方法总结...
作者:liigo 日期:2010/8/25 Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接 ...
- jdbc存储过程mysql_使用JDBC操作存储过程
使用JDBC操作存储过程,可以借助于一个借口CallableStatement实现. 此时调用存储过程的sql语句为:{call procedure_name [(arg1),(arg2)]} 而Ca ...
- powershell写mysql_使用Powershell对MySql运行MySql存储过程脚本
我想在一个QA环境的MySQL 5.6服务器上执行一个MySQL存储过程.这是通过Azure piplines实现的持续交付的一部分. .sql 文件有多个存储过程,MySQL Workbench成功 ...
- 易语言 存储过程 mysql_在易语言中调用MS SQL SERVER数据库存储过程方法总结
五.调用"直接返回(return)一个值"的存储过程 此类返回值相当于易语言子程序的返回值,是在存储过程代码内部使用 return 指令返回的.欲得到这个返回值,稍微有点麻烦,且看 ...
- 积分签到mysql_积分获取和消费的存储过程
1.GM_JF客户账户积分表 2.GM_JF_DETAIL客户账户积分消费记录 3.GM_JF_ACTION_RULES积分动作规则表 4.GM_JF_GOODS_RULES积分商品规则表 无 -- ...
- MySQL——创建存储过程和函数
简单地说,存储过程就是一条或多条 SQL 语句的集合,可视为批文件,但是其作用不仅限于批处理.存储程序可以分为存储过程和函数.存储过程要用 CALL 语句来调用,并且只能用输出变量返回值. 1. ...
- hql调用mysql存储过程_hibernate调用mysql存储过程
在mysql中创建两个存储过程,如下: 1.根据id查找某条数据: 1 CREATE PROCEDURE `findEmpById`(IN id INTEGER(11))2 begin3 s ...
最新文章
- Visual Studio c++必要的背景知识--链接与编译
- Oracle真实世界数据链——将现实世界和区块链世界相互打通——让主流币爆涨十倍的项目
- Redis几个认识误区
- 线程:synchronized
- 革命离成功还非常非常远,我还不怎么努力
- HTML5法律律师咨询公司响应式模板
- Django 后台带有字典的列表数据与页面js交互
- 10.傅里叶变换——2D中的傅里叶变换,傅里叶变换的应用_5
- 发展前景好的互联网技术方面,你觉得比较适合女孩子的都有哪些啊?
- [转载] Java中自定义异常的声明与处理
- spring中用到了哪些设计模式
- html中最小规格字体,font-size【CSS 字体大小】文字大小尺寸
- python外贸应用_Python脚本+Sublime免费查询阿里巴巴国际站产品排名
- 世界500强榜单出炉:中国公司首进三强 沃尔玛居首
- 考研高等数学公式总结(一)
- java awt canvas_java.awt 类 Canvas - Java 中文参考手册
- Longhorn时代,浏览器的终结?——关于Avalon和XAML
- 域名批量查询 网站域名批量查询
- schannel: next InitializeSecurityContext failed: SEC_E_ILLEGAL_MESSAGE (0x80090326)
- EventLog Analyzer:功能丰富的事件日志管理软件
热门文章
- python3和php7哪个好_性能是Flask的3倍!比PHP7还快!这个Python框架你值得拥有!
- python正确打开方式_Python log 的正确打开方式
- 「雕爷学编程」Arduino动手做(22)——8X8 LED点阵MAX7219屏
- redis 系列7 数据结构之跳跃表
- 如何在 CentOS 中设置 NTP 服务器
- [swustoj 771] 奶牛农场
- HappyLeetcode37:Add Binary
- 解决firefox的button按钮文字不能垂直居中
- 学习cluster技术
- 华为lab-rs-v1-2.9_OSPF区域34