MySQL数据库(31):存储过程 procedure
存储过程 procedure
stored procedure 完成特定功能的SQL语句集,存储在数据库中,经过第一次编译之后再次调用不需要编译(效率较高)
1、存储过程与函数的区别
1.1、相同点
- 都是为了可重复地执行操作数据库的SQL语句集合
- 都是一次编译,多次执行
1.2、不同点
- 标识符不同,函数function 过程 procedure
- 函数中有返回值,且必须返回,而过程没有返回值
- 过程无返回值类型,不能将结果直接赋值给变量;函数有返回值类型,调用时,除了在select中,必须将返回值赋值给变量
- 函数可以再select语句中直接使用,而过程不能
2、存储过程的操作
2.1、创建过程
基本语法
create procedure 过程名字([参数列表])
bengin过程体
end
结束符
如果只有只有一条指令可以省略begin和end
create procedure my_pro1()
select * from my_student;
过程基本上可以完成函数对应的所有功能
-- 修改语句结束符
delimiter $$
-- 创建过程
create procedure my_pro2()
begin-- 求1到100之间的和-- 创建局部变量declare i int default 1;-- declare sum int default 0;-- 会话变量set @sum = 0;-- 开始循环获取结果while i <= 100 do-- 求和set @sum = @sum + i;set i = i + 1;end while;-- 显示结果select @sum;end
$$
delimiter ;
2.2、查看过程
-- 查看所有存储过程
show procedure status [like 'pattern'];-- 查看过程的创建语句
show create procedure 过程名字\G
2.3、调用过程
过程没有返回值
基本语法
call 过程名([实参列表]);-- eg:
call my_pro2();
+------+
| @sum |
+------+
| 5050 |
+------+
2.4、删除过程
基本语法
drop procedure 过程名;
3、存储过程的形参类型
存储过程的参数和函数一样,需要制定其类型
但是存储过程对参数还有额外的要求,自己的参数分类
in:(值传递)参数从外部传入,在过程内部使用,可以是直接数据,也可以是保存数据的变量
out:(引用传递)参数在过程中赋值,传入必须是变量,如果有外部数据,会被清空为null
inout:(引用传递)数据可以从外部传入过程内部使用,同时内部操作之后,又回将数据返回给外部
代码示例
-- 创建3个会话变量
set @var1 = 1;
set @var2 = 2;
set @var3 = 3;-- 查询会话变量
select @var1, @var2, @var3;
+-------+-------+-------+
| @var1 | @var2 | @var3 |
+-------+-------+-------+
| 1 | 2 | 3 |
+-------+-------+-------+
1 row in set (0.00 sec)-- 修改语句结束符
delimiter $$-- 定义过程
create procedure my_pro3(in a int, out b int, inout c int)
begin-- 查看传入的3个数据值select a, b, c;-- +------+------+------+-- | a | b | c |-- +------+------+------+-- | 1 | NULL | 3 |-- +------+------+------+-- 修改3个变量值set a = 10;set b = 20;set c = 30;select a, b, c;-- +------+------+------+-- | a | b | c |-- +------+------+------+-- | 10 | 20 | 30 |-- +------+------+------+-- 查看会话变量select @var1, @var2, @var3;-- +-------+-------+-------+-- | @var1 | @var2 | @var3 |-- +-------+-------+-------+-- | 1 | 2 | 3 |-- +-------+-------+-------+-- 修改会话变量set @var1 = 'a';set @var2 = 'b';set @var3 = 'c';select @var1, @var2, @var3;-- +-------+-------+-------+-- | @var1 | @var2 | @var3 |-- +-------+-------+-------+-- | a | b | c |-- +-------+-------+-------+
end
$$delimiter ;-- 调用过程
call my_pro3(@var1, @var2, @var3);-- 再次查看会话变量
mysql> select @var1, @var2, @var3;
+-------+-------+-------+
| @var1 | @var2 | @var3 |
+-------+-------+-------+
| a | 20 | 30 |
+-------+-------+-------+
分析:
1、实参传入过程之后,实际上没有改变外部变量的值,而是把值给了形参,out类型不能接收外部变量的值,默认为null
2、当过程执行到end 的时候,如果是out或inout变量,会将形参的值重新赋值给实参变量
MySQL数据库(31):存储过程 procedure相关推荐
- MySQL数据库:存储过程Procedure
一.存储过程: SQL语句需要先编译然后执行,而存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用它. 存储过程 ...
- java JDBC连接MySQL数据库调用存储过程进行查询
java JDBC连接MySQL数据库调用存储过程进行查询 主程序代码 工具类 文件信息 存储过程 结果截图 主程序代码 package Mysql;import util.JDBCUtils; im ...
- MySql数据库学习--存储过程(1)
在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用户入门. 存储过程介绍 存储过程是一组为了 ...
- mysql数据库的存储过程不用学吗,MySql数据库之存储过程学习_MySQL
之前在工作中总是听别人提到存储过程,觉得是个很高深的东西,利用工作之余,看了下相关的知识,现将学习知识总结如下,希望可以为刚学习的人提供些许帮助. 开发环境:Navicat For Mysql. My ...
- 系列 | 高性能存储-MySQL数据库之存储过程揭秘
墨墨导读:本文介绍什么是存储过程?为什么要使用存储过程?如何使用存储过程?如何去使用存储过程以及怎么执行存储过程. DBASK小程序已经开设"MySQL 数据库专栏",欢迎大家关注 ...
- mysql数据库加密存储过程_数据库系统(六)---MySQL语句及存储过程
1.存储过程是一组为了完成某项特定功能的 SQL 语句集,其实质上就是一段存储在数据库中的代码,它可以由声明式的 SQL 语句(如 CREATE.UPDATE 和SELECT 等语句)和过程式 SQL ...
- mysql数据库之存储过程
一.存储过程简介. 存储过程是事先经过编译并存储在数据库中的一段sql语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是也有好处的 ...
- mysql数据库的存储过程
一. 什么是存储过程: 存储过程是一组可编程的函数,是为了完成特定功能的SQL语句集,经过第一次编译后再次调用不需要再次编译,创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调 ...
- jpa mysql存储过程_(原)springbootjpa调用服务器mysql数据库的存储过程方法-Go语言中文社区...
一.springboot jpa项目文件配置 #---------------------------------------------------------- ################# ...
- MYSQL数据库学习总结
1.数据库概述 1.1.为什么要使用数据库 1.2.数据库与数据库管理系统 为什么要使用数据库? 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业 ...
最新文章
- 这7款实用windows软件,太让人惊喜了!
- javascript中的this
- 20g的ubuntu虚拟机socket问题记录:只能单向通信(只能发出不能接收)
- VTK:可视化之Kitchen
- Oracle几种查找和删除重复记录的方法总结
- curl命令java_Java中的curl命令
- 产品经理晋升后如何带团队?
- 【LeetCode】剑指 Offer 10- I. 斐波那契数列
- 百度Apollo放出豪言:下半年每月上市一款新车
- MySQL-02-windows下查看frm,myi,myd
- Android 两个Activity进行数据传送 发送
- [ubuntu] 按文件大小进行排序
- Android MultiPart图像上传进度改造NodeJS
- 网管培训之基础知识介绍
- “五一”或成疫情来最火爆假期,招行信用卡天天返利助力消费
- 【论文笔记】气道树分割:A 3D UNet-Graph Neural Network for Airway Segmentation
- Python编写尼姆游戏
- 我为什么鼓励你读计算机领域的博士?
- 转载_纯Java代码批量去除图片文字水印
- 工作站是高档的微型计算机 (,家用pc机和工作站有什么不同?