MySQL 存储过程和函数
存储过程就是一条或多条sql语句的集合
创建存储过程
使用 create procedure 创建存储过程,参数类型有三种 in,out,inout
IN 表示调用存储过程给的参数值
OUT 表示输出的值调用时可以接受
INOUT 即可做输出,也可做输入
BEGIN和END之间定义存储过程体
下面这个存储过程就是查询所有fruits 的数据
使用 delimiter来定义结束符,表示一个存储过程的结束 一般使用 $$ 或者 //
DELIMITER //CREATE PROCEDURE Proc()BEGINSELECT * FROM fruits;END //# 这个存储过程的作用是 把查询到的fruits数量给到 param1,这个out是传出来的值,我们可以在外面接受
CREATE PROCEDURE CountProc (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM fruits;
END;
创建存储函数
存储函数需要生命函数的返回值类型
使用 create function 创建函数,参数类型和存储过程类似,IN,OUT,INOUT
DELIMITER //CREATE FUNCTION NameByZip()RETURNS CHAR(50)BEGINRETURN (SELECT s_name FROM suppliers WHERE s_call= '48075');END //
变量的使用****
变量使用参考链接
用户变量
用户变量使用"@"开头
有以下三种方式设置用户变量:
- set语句,此时可以使用"=“或者”:="操作符;
- select语句,此时只能使用":=“格式赋值,因为除了set语句中,”="都会被视为比较操作符。;
- select … into var_name from TABLE语句,此时要求select语句只能返回标量值,即单行数据。
系统变量
全局系统变量使用global或者"@@global.“关键字来设置。会话系统变量使用session或者”@@session."关键字来设置,其中session可以替换为Local,它们是同义词。
-- 设置全局系统变量
set global sort_buffer_size=32M;
set @@global.sort_buffer_size=32M;
-- 设置会话系统变量
set session sort_buffer_size=32M;
set @@session.sort_buffer_size=32M;
set sort_buffer_size=32M;
-- 查看全局系统变量值
select @@global.sort_buffer_size;
show global variables like "sort_buffer%";
-- 查看会话系统变量,不能使用select sort_buffer_size
select @@session.sort_buffer_size;
select @@sort_buffer_size;
show [session] variables like "sort_buffer%";
局部变量
只能在begin…and语句块中生效。它不像用户变量,本地变量必须使用declare事先声明,所以declare也必须在begin…end中使用。
# 声明变量
BEGIN
declar var_name data_type
set var_name = value;
END# 声明3个变量,分别为var1、var2和var3,数据类型为INT,使用SET为变量赋值,代码如下:
DECLARE var1, var2, var3 INT;
SET var1 = 10, var2 = 20;
SET var3 = var1 + var2;# MySQL中还可以通过SELECT ... INTO为一个或多个变量赋值,语法如下:
SELECT col_name[,...] INTO var_name[,...] table_expr;
游标的使用
个人在开发中几乎没怎么用过
# 声明光标
declare cursor_name cursor for select_statement# 声明名称为cursor_fruit的光标
DECLARE cursor_fruit CURSOR FOR SELECT f_name, f_price FROM fruits ;
上面的示例中,光标的名称为cur_fruit,SELECT语句部分从fruits表中查询出f_name和f_price字段的值。# 打开光标
open cursor_name# 使用光标
fetch cursor_name into var_name1,var_name2# 关闭光标
close cursor_name
IF 语句
示例
IF val IS NULLTHEN SELECT 'val is NULL';ELSE SELECT 'val is not NULL';
END IF;
CASE 语句
case val
when val1
then xxxx
when val2
then xxxx2
else xxxxx3
end case# 使用CASE流程控制语句的第2种格式,判断val是否为空、小于0、大于0或者等于0,
CASEWHEN val IS NULL THEN SELECT 'val is NULL';WHEN val < 0 THEN SELECT 'val is less than 0';WHEN val > 0 THEN SELECT 'val is greater than 0';ELSE SELECT 'val is 0';
END CASE;
调用存储过程
- 使用 call
call procedure_name
DELIMITER //CREATE PROCEDURE CountProc1 (IN sid INT, OUT num INT)BEGINSELECT COUNT(*) INTO num FROM fruits WHERE s_id = sid;END //# 调用存储过程
CALL CountProc1(101,@num)
# 传出来的变量
select @num
调用存储函数
定义存储函数CountProc2,然后调用这个函数,代码如下:
# 定义了一个存储函数,返回一个int类型的数据,数据是查询所有的水果,s_id=(sid,int)DELIMITER //CREATE FUNCTION CountProc2 (sid INT)RETURNS INTBEGINRETURN (SELECT COUNT(*) FROM fruits WHERE s_id = sid);END //DELIMITER ;# 调用select CountProce2(102)
查看存储过程和函数
使用 show procedure status like ‘存储过程名,函数’
使用 show create procedure ‘存储过程名,函数’ ----- 查看当初是怎么定义的
MySQL中的存储过程,函数的信息在 information_schema.Routines 表中
# 先看下表中有哪些字段
select * from information_schema.Routines;
如果我们还需要查询满足我们需求的内容,我们只需要对这个information_schema.Routines 中过滤就行 ,where 等
删除存储过程,函数
语法格式
drop procedure procedure_name
drop function function_name
MySQL 存储过程和函数相关推荐
- WebDay18 MySQL存储过程 存储函数 触发器 事务
MySQL存储过程 存储函数 触发器 事务 一.MySQL存储过程和函数 1.存储过程和函数的概念 2.存储过程和函数的好处 3.存储过程和函数的区别 4.创建存储过程 5.调用存储过程 6.查看存储 ...
- mysql存储过程与函数、触发器、游标、变量等知识点详解
引言:该文章仅供自己学习整理 mysql执行顺序 语法顺序 写sql的关键字顺序 select [distinct] from join(如left join) on where group by h ...
- Mysql学习总结(11)——MySql存储过程与函数
2019独角兽企业重金招聘Python工程师标准>>> 摘要:存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程 ...
- mysql 存储过程与函数_12 MySQL存储过程与函数
存储过程和函数 存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合. 调用存储过程和函数可以简化应用开发人员的工作,减少数据在数据库和应用服务器之间的传输,提高数据处理的效率. 存储过 ...
- mysql存储过程或函数中传入参数与表字段名相同引发的悲剧
真实案例.如下的一个存储过程: create procedure Apple(in user_id int) begin delete from users where user_id = user_ ...
- MySQL存储过程和函数示例
存储过程和函数是在数据库中定义的一些SQL语句的集合,然后直接调用这些存储过程和函数来执行定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句,而且存储过程和函数是在MySQL ...
- 争议?MySQL存储过程与函数,封装,体,完整详细可收藏
文章目录 1. 存储过程概述 2. 创建存储过程 3. 调用存储过程 4. 存储函数的使用 5. 存储过程和函数的查看.修改.删除 6. 关于存储过程使用的争议 MySQL从5.0版本开始支持存储过程 ...
- MySql存储过程与函数
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行 ...
- [mysql]存储过程/存储函数
[Stored Procedure /Stored Function] 存储过程 定义 语法分析: 调试 效果比较 存储函数 应用 语法分析: 两者对比 存储过程和函数的查看.修改.删除 查看 修改 ...
- 【MySQL学习】4、MySQL存储过程和函数
文章目录 1.存储过程和函数概念 2.存储过程的使用 (1)创建存储过程 (2)调用存储过程 (3)查看存储过程 (4)删除存储过程 3.存储过程的语法 (1)声明变量 (2)if条件判断 (3)传递 ...
最新文章
- 不要纠结于过去发生的事
- 使用云祺虚拟机备份软件恢复Citrix XenServer 虚拟机
- 北斗导航 | 利用模拟卫星星座估计GNSS接收机位置
- 3台机器配置hadoop集群_Hadoop学习之路(三)Hadoop集群搭建和简单应用
- java 模板引擎_SpringBoot入门系列(四)如何整合Thymeleaf模板引擎
- 基于struts2的文件上传下载
- echarts 图表配置tooltip 的formatter
- 开源HTML5应用开发框架 - iio Engine
- 刘挺 | 从知识图谱到事理图谱
- HTML的文本格式化
- caffe boost cuda __float128 undefined
- 基于QT播放器的实现(一)Rgb、YUV格式(附带代码)
- IIC总线设计⑥——时钟模块DS1302
- 计算机局域网硬件维护与网络安全的分析
- js小学生图区_多种方式实现js图片预览
- Learning Deep Similarity Models with Focus Ranking for Fabric Image Retrieval 学习笔记
- 7-21 输出大写英文字母 (15分)
- GPS接收机学习小记(一)
- 并查集+字符排序-困兽之斗(乐视题)
- 程序人生 -【2017年读书报告+书籍推荐】