MySQL教程之存储过程与函数
存储程序分为存储过程和函数
可以使用CALL来调用存储过程,只能输出变量返回值。存储过程可以调用其他存储过程
函数可以从语句外调用,也能返回标量值
什么是存储过程?
简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;
ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;
存储过程的特性
有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能;
函数的普遍特性:模块化,封装,代码复用;
速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;
DELIMITER的使用
mysql默认的结束符为;但是存储过程中可能出现多个分号导致结束。所以需要用这个关键字设置SQL语句结束符,使用完之后可以再改回来
要避免使用\,因为\是mysql的转义字符
一、存储过程的创建
CREATE PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body;
sp_name:存储过程的名称
proc_parameter:存储过程的参数列表
routine_body:是SQL代码的内容(用BEGIN和END来表示SQL代码的开始和结束)
proc_parameter格式如下:
[ IN | OUT | INOUT ] param_name type
IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出
param_name参数的名称
type参数的类型
演示
创建一个名为AvgFruitPrice的存储过程,返回所有水果的平均价格
DELIMITER //
create procedure AvgFruitPrice()
begin
select avg(f_price) as avgprice from fruits;
end;
//
创建一个查看fruits表的存储过程
DELIMITER //
create procedure Proc()
begin
select * from fruits;
end;
//
创建名称为CountProc的存储过程(将count(*)的结果放入参数param1中)
DELIMITER //
create procedure CountProc(out paraml int)
begin
select count(*) into param1 from fruits;
end;无锡做人流 http://www.chnk120.com
//
二、函数的创建
CREATE FUNCTION func_name ([func_parameter[,……]])
RETURNS type
[characteristic……] routine_body
func_name:存储函数的名称
func_parameter:存储过程的参数列表
RETURNS type:表示函数返回数据的类型
characteristic:指定存储函数的特性
proc_parameter格式如下:
[ IN | OUT | INOUT ] param_name type
IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出
param_name参数的名称
type参数的类型
如果存储函数的RETURN语句返回一个类型不同于函数的RETURNS子句中指定类型的值,返回值将被强制转为恰当的类型
案例
创建名为NameByZip的存储函数,返回select语句的查询结果,数值类型为字符串类型
DELIMITER //
create function NameByZip()
returns varchar(50)
return (select s_name from suppliers where s_call='48075');
//
MySQL教程之存储过程与函数的更多相关文章
- MySQL中的存储过程和函数使用详解
一.对待存储过程和函数的态度 在实际项目中应该尽量少用存储过程和函数,理由如下: 1.移植性差,在MySQL中的存储过程移植到sqlsever上就不一定可以用了. 2.调试麻烦,在db中报一个错误和在 ...
- MySQL基础值 存储过程和函数
一.创建存储过程和函数 什么是创建存储过程和函数? 就是将经常使用的一组SQL语句组合在一起,并将这些SQL语句当做一个整体存储在MYSQL服务器中. 创建存储过程的语句是:CREATE PROCE ...
- MySQL中的存储过程和函数
存储过程和函数 简单的说,存储过程就是一条或者多条SQL语句的集合.可以视为批文件,但是其作用不仅仅局限于批处理.本文主要介绍如何创建存储过程和存储函数,以及如何调用.查看.修改.删除存储过程和存储函 ...
- MySQL存储过程和自定义函数、Navicat for mysql、创建存储过程和函数、调用存储过程和函数的区别
1 MySQL存储过程和函数 过程和函数,它们被编译后保存在数据库中,称为持久性存储模块(Persistent Stored Module,PSM),可以反复调用,运行速度快. 1.1 存储过程 存储 ...
- MySQL中的存储过程、函数与触发器
一.对待存储过程和函数的态度 优点: 1.存储过程只在创建时进行编译,sql语句则每次执行都需要编译.能提高数据库执行速度. 2.简单复杂操作结合事物一起封装. 3.复用性高. 4.安全性高,可指定存 ...
- <MySQL>入门七 存储过程和函数
-- 存储过程和函数 /* 存储过程和函数:类似java中的方法 好处: 1.提高代码的重用性 2.简化操作 */ /* 存储过程 含义:一组预先编译好的SQL语句的集合.理解成批处理语句 1.提高代 ...
- Mysql变量、存储过程、函数、流程控制
一.系统变量 系统变量: 全局变量 会话变量 自定义变量: 用户变量 局部变量 说明:变量由系统定义,不是用户定义,属于服务器层面 注意:全局变量需要添加global关键字,会话变量需要添加sessi ...
- MySql视图、存储过程、函数、索引
一.视图 视图是查询命令结果构成的一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集合,并可以当作表来查询使用. 1创建视图 - ...
- 八、mysql视图、存储过程、函数以及时间调度器
.create or replace view emp_view as select * from t4 ;给t4表创建一个名为emp_view的视图 .drop view emp_view 删除视图 ...
随机推荐
- Luogu P1429 平面最近点对 【分治】By cellur925
题目传送门 题目大意:给定平面上n个点,找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的.$n$<=100000. $Algorithm$ 最朴素的$n^2$枚举肯定 ...
- mybaits 连接数据库汉字保存乱码??
查看数据库连接地址: jdbc.url=jdbc:mysql://localhost:3306/az?useUnicode=true&characterEncoding=utf-8 多了一个a ...
- 一些CSS的备忘
text-transform 文本转换 属性值是 none表示没有 不转换 同时也是默认的 capitalize 表示首字母大写 uppercase全部转换为大写 lowercase全部转为小写 te ...
- AtCoder Grand Contest 010 F - Tree Game
题目传送门:https://agc010.contest.atcoder.jp/tasks/agc010_f 题目大意: 给定一棵树,每个节点上有\(a_i\)个石子,某个节点上有一个棋子,两人轮流操 ...
- Monitor CodeForces - 846D
题目 题意:有一个n*m的显示屏,有q个坏点先后出现,已知第i个坏点位置为(xi,yi),在ti时间出现.显示屏上出现一个k*k的矩阵全都是坏点时显示屏就是坏的.输出显示屏坏的时间,如果不会坏就输出- ...
- 【转】Java集合:HashMap源码剖析
Java集合:HashMap源码剖析 一.HashMap概述二.HashMap的数据结构三.HashMap源码分析 1.关键属性 2.构造方法 3.存储数据 4.调 ...
- EditText输入手机号自动带空格
xml: <EditText android:id="@+id/edit_main" android:layout_width="match_parent" ...
- .net4.5注册到iis
开始->所有程序->附件->鼠标右键点击“命令提示符”->以管理员身份运行->%windir%\Microsoft.NET\Framework\v4.0.30319\as ...
- Vue踩坑第一步,安装Vue最新版本
学习vue第一步肯定是安装vue-cli,那么肯定想去搜下如何安装vue-cli呢? 网上搜到的结果大都是: npm i vue-cli -g 输入vue -V发现: 输入node -v发现: 自己明 ...
- raid 0 1 5 10 总结的知识点
raid 0 1 5 10 raid 发的别名条带 raid 0 读取性能最高需要磁盘2*N个(N>0)代表所有raid级别中的最高存储性能,其实原理就是把连续的数据分散到多个磁盘上存取,这样, ...