存储过程 procedure

stored procedure 完成特定功能的SQL语句集,存储在数据库中,经过第一次编译之后再次调用不需要编译(效率较高)

1、存储过程与函数的区别

1.1、相同点

  1. 都是为了可重复地执行操作数据库的SQL语句集合
  2. 都是一次编译,多次执行

1.2、不同点

  1. 标识符不同,函数function 过程 procedure
  2. 函数中有返回值,且必须返回,而过程没有返回值
  3. 过程无返回值类型,不能将结果直接赋值给变量;函数有返回值类型,调用时,除了在select中,必须将返回值赋值给变量
  4. 函数可以再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相关推荐

  1. MySQL数据库:存储过程Procedure

    一.存储过程: SQL语句需要先编译然后执行,而存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用它. 存储过程 ...

  2. java JDBC连接MySQL数据库调用存储过程进行查询

    java JDBC连接MySQL数据库调用存储过程进行查询 主程序代码 工具类 文件信息 存储过程 结果截图 主程序代码 package Mysql;import util.JDBCUtils; im ...

  3. MySql数据库学习--存储过程(1)

    在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用户入门. 存储过程介绍 存储过程是一组为了 ...

  4. mysql数据库的存储过程不用学吗,MySql数据库之存储过程学习_MySQL

    之前在工作中总是听别人提到存储过程,觉得是个很高深的东西,利用工作之余,看了下相关的知识,现将学习知识总结如下,希望可以为刚学习的人提供些许帮助. 开发环境:Navicat For Mysql. My ...

  5. 系列 | 高性能存储-MySQL数据库之存储过程揭秘

    墨墨导读:本文介绍什么是存储过程?为什么要使用存储过程?如何使用存储过程?如何去使用存储过程以及怎么执行存储过程. DBASK小程序已经开设"MySQL 数据库专栏",欢迎大家关注 ...

  6. mysql数据库加密存储过程_数据库系统(六)---MySQL语句及存储过程

    1.存储过程是一组为了完成某项特定功能的 SQL 语句集,其实质上就是一段存储在数据库中的代码,它可以由声明式的 SQL 语句(如 CREATE.UPDATE 和SELECT 等语句)和过程式 SQL ...

  7. mysql数据库之存储过程

    一.存储过程简介. 存储过程是事先经过编译并存储在数据库中的一段sql语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是也有好处的 ...

  8. mysql数据库的存储过程

    一. 什么是存储过程: 存储过程是一组可编程的函数,是为了完成特定功能的SQL语句集,经过第一次编译后再次调用不需要再次编译,创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调 ...

  9. jpa mysql存储过程_(原)springbootjpa调用服务器mysql数据库的存储过程方法-Go语言中文社区...

    一.springboot jpa项目文件配置 #---------------------------------------------------------- ################# ...

  10. MYSQL数据库学习总结

    1.数据库概述 1.1.为什么要使用数据库 1.2.数据库与数据库管理系统 为什么要使用数据库? 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业 ...

最新文章

  1. 这7款实用windows软件,太让人惊喜了!
  2. javascript中的this
  3. 20g的ubuntu虚拟机socket问题记录:只能单向通信(只能发出不能接收)
  4. VTK:可视化之Kitchen
  5. Oracle几种查找和删除重复记录的方法总结
  6. curl命令java_Java中的curl命令
  7. 产品经理晋升后如何带团队?
  8. 【LeetCode】剑指 Offer 10- I. 斐波那契数列
  9. 百度Apollo放出豪言:下半年每月上市一款新车
  10. MySQL-02-windows下查看frm,myi,myd
  11. Android 两个Activity进行数据传送 发送
  12. [ubuntu] 按文件大小进行排序
  13. Android MultiPart图像上传进度改造NodeJS
  14. 网管培训之基础知识介绍
  15. “五一”或成疫情来最火爆假期,招行信用卡天天返利助力消费
  16. 【论文笔记】气道树分割:A 3D UNet-Graph Neural Network for Airway Segmentation
  17. Python编写尼姆游戏
  18. 我为什么鼓励你读计算机领域的博士?
  19. 转载_纯Java代码批量去除图片文字水印
  20. 工作站是高档的微型计算机 (,家用pc机和工作站有什么不同?

热门文章

  1. inno setup vs NSIS
  2. MySQL替换换行符
  3. 笔记03-.NET高级技术
  4. 网络游戏P2P智能更新解决方案
  5. 2019NLP求职指南
  6. 删除计算机用户时拒绝访问权限,Win7电脑删除文件拒绝访问怎么办?管理员身份删除文件...
  7. OpenCV + Eclipse CDT + MinGW超爽使用体验以及常见问题合辑
  8. 再一次利用with as 优化SQL
  9. 使用python将数据存储在txt文档中
  10. 三、Hadoop运行模式(本地模式、伪分布模式)