一、简介

  • 从 5.0 版本才开始支持,是一组为了完成特定功能的SQL语句集合(封装),比传统SQL速度更快、执行效率更高。
  • 存储过程的优点
    1、执行一次后,会将生成的二进制代码驻留缓冲区(便于下次执行),提高执行效率
    2、SQL语句加上控制语句的集合,灵活性高
    3、在服务器端存储,客户端调用时,降低网络负载
    4、可多次重复被调用,可随时修改,不影响客户端调用
    5、 可完成所有的数据库操作,也可控制数据库的信息访问权限
  • 为什么要用存储过程?
    1.减轻网络负载;2.增加安全性

二、创建存储过程

2.1 创建基本过程

使用create procedure语句创建存储过程

存储过程的主体部分,被称为过程体;以begin开始,以end$$结束

#声明语句结束符,可以自定义:
delimiter $$
#声明存储过程
create procedure 存储过程名(in 参数名 参数类型)
begin
#定义变量
declare 变量名 变量类型
#变量赋值
set 变量名 = 值sql 语句1;sql 语句2;...
end$$
#恢复为原来的语句结束符
delimiter ;(有空格)

实例:

mysql> delimiter $$
mysql> create procedure text()-> begin-> select * from stu.a_player;-> end $$
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;

调用存储过程

call 存储过程名(实际参数);
mysql> call text;
+----+----------+-------+
| id | name     | score |
+----+----------+-------+
|  1 | zhangsan |    88 |
|  2 | lisi     |    89 |
|  3 | wangwu   |    67 |
|  4 | zhaoliu  |    90 |
|  5 | xuli     |    80 |
|  6 | keke     |    75 |
+----+----------+-------+
6 rows in set (0.00 sec)

删除存储过程

mysql> drop procedure text;

2.2 存储过程的参数

MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:

CREATEPROCEDURE 存储过程名([[IN |OUT |INOUT ] 参数名 数据类形...])

IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

传递参数实例:
IN

mysql> create procedure test1(in in_id int(2))-> begin-> select * from stu.a_player where id=in_id;-> end $$
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;#将4传递给in_id变量,执行事务
mysql> call test1(4);
+----+---------+-------+
| id | name    | score |
+----+---------+-------+
|  4 | zhaoliu |    90 |
+----+---------+-------+
1 row in set (0.00 sec)#将6传递给in_id变量,执行事务
mysql> call test1(6);
+----+------+-------+
| id | name | score |
+----+------+-------+
|  6 | keke |    75 |
+----+------+-------+
1 row in set (0.00 sec)

OUT

mysql> delimiter $$
mysql> create procedure test2(out aa int) -> begin-> select aa;-> set aa=2;-> select aa;-> end $$
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
#将@aa变量传递给test2 事务
mysql> call test2(@aa);
+------+
| aa   |
+------+
| NULL |
+------+
#out向调用者输出参数,不接收输入的参数,所以aa为null
1 row in set (0.00 sec)
+------+
| aa   |
+------+
|    2 |
+------+
事务将aa变量设置为2(设置的是全局),则可进行输出
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> select @aa;
+------+
| @aa  |
+------+
|    2 |
+------+
1 row in set (0.00 sec)
#事务外查询变量,已经被修改

IN 、OUT、 INOUT 对比

mysql> delimiter //
mysql> create procedure test3(in num1 int,out num2 int,inout num3 int)-> begin-> select num1,num2,num3;-> set num1=10,num2=20,num3=30;-> select num1,num2,num3;-> end //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> call test3(@num1,@num2,@num3);
+------+------+------+
| num1 | num2 | num3 |
+------+------+------+
|    1 | NULL |    3 |
+------+------+------+
1 row in set (0.00 sec)
+------+------+------+
| num1 | num2 | num3 |
+------+------+------+
|   10 |   20 |   30 |
+------+------+------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
  • in和inout参数会将全局变量的值传入存储过程中,而out参数不会将全局变量的值传入存储过程中。在存储过程使用中,参数值in,out,inout都会发生改变。
mysql> select @num1,@num2,@num3;
+-------+-------+-------+
| @num1 | @num2 | @num3 |
+-------+-------+-------+
|     1 |    20 |    30 |
+-------+-------+-------+
1 row in set (0.00 sec)
  • 调用完存储过程后,发现in参数不会对全局变量的值引起变化,而out和inout参数调用完存储过程后,会对全局变量的值产生变化,会将存储过程引用后的值赋值给全局变量。
  • in参数赋值类型可以是变量还有定值,而out和inout参数赋值类型必须为变量。

MySQL的存储过程(in、out、inout)相关推荐

  1. mysql out_mysql存储过程 in out inout

    存储过程的好处 存储过程是一组预编译好的sql语句,用来执行某个特定的功能.这样可以省去sql解析.编译.优化的过程,提高了执行效率,同时,在调用的时候只传一个存储过程的名称,而不用传一大堆sql语句 ...

  2. 什么场景使用mysql的存储过程_mysql存储过程的使用

    直入正题吧:首先创建一张 students 表 create tablestudents( idint primary keyauto_increment, ageint, namevarchar(2 ...

  3. mysql %type_mysql 存储过程 %type

    MYSQL修改存储过程的访问权限 版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/inforstack/article/details/80547478 ...

  4. JDBC对MySQL数据库存储过程的调用

    一.MySQL数据库存储过程: 1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完毕特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中.用 ...

  5. mysql数据库存储过程及调用方法

    mysql数据库存储过程及调用方法 mysql5.0以后就支持存储过程了,目前mysql的6.0Alpha版也已经推出.6.0不仅支持大型数据库如oracle等的绝大部分功 能,如存储过程.视图.触发 ...

  6. MySQL 调用存储过程

    1:存储过程返回值 View Code public void InputOutputParameters() { AdoHelper ado = AdoHelper.CreateHelper(DbP ...

  7. jdbc存储过程mysql_JDBC对MySQL数据库存储过程的调用

    1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完成特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中,用户通过指定存储过程的名字并给出参 ...

  8. MySQL 之 存储过程

    一.初识存储过程 1.什么是存储过程 存储过程是在大型数据库系统中一组为了完成特定功能的SQL语句集,存储在数据库中.存储过程经过第一次编译后,再次调用不需要编译,用户可以通过指定的存储过程名和给出一 ...

  9. MySql的存储过程

    我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的 ...

  10. mysql数据存储过程详解_mysql数据存储过程参数实例详解

    MySQL 存储过程参数有三种类型:in.out.inout.它们各有什么作用和特点呢? 一.MySQL 存储过程参数(in) MySQL 存储过程 "in" 参数:跟 C 语言的 ...

最新文章

  1. java selenium (九) 常见web UI 元素操作 及API使用
  2. [转]常见的动态规划问题分析与求解
  3. MAC修改python和pip版本
  4. 剑指offer-包含min函数的栈
  5. mysql 主从 问题_Mysql解决主从不同步问题
  6. TensorFlow 2.0 - Checkpoint 保存变量、TensorBoard 训练可视化
  7. EM算法的九层境界:​Hinton和Jordan理解的EM算法
  8. 如何才能成为一个成功的项目经理
  9. sumdiv 算术基本定理的推论
  10. [转载] numpy用法(logical_and, nonzero,arange, reshape)
  11. tomcat+路由器+oray
  12. ural 2023. Donald is a postman
  13. 信息安全系统设计基础实验四:外设驱动程序设计
  14. 503.下一个更大元素II(力扣leetcode) 博主可答疑该问题
  15. 许昌学院计算机系统试题,2016秋大学计算机(许昌学院)-中国大学mooc-题库零氪...
  16. java 高淇讲的怎么样_反射机制--高淇Java视频笔记
  17. 网上流传的飞扬学院Java_收获| 云和JAVA、UI双班毕业,飞扬青春再出发!
  18. 我们都应该停止三种测试实践
  19. Scala的虚无与飘渺
  20. 计算机中最小值的公式,用数组公式在数值列中查找大于指定值的最小值

热门文章

  1. 打造全新的网站群管理系统
  2. 分支定界法 python_分支定界(Branchbound)算法
  3. 双主机切换下导致的显示器闪动
  4. 抽象类(abstract class)和接口(interface)
  5. 理解下DSO/ADSO
  6. C/C++ 由int (*p)[5]与int *p[5]引发的学习与思考
  7. LBS-手机定位应用
  8. 怎么用白光干涉仪的拼接测量功能
  9. 2022年危险化学品经营单位主要负责人最新解析及危险化学品经营单位主要负责人考试资料
  10. linux 找u盘,linux系统怎样找到U盘?