MySQL 存储过程参数有三种类型:in、out、inout。它们各有什么作用和特点呢?

一、MySQL 存储过程参数(in)

MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。 drop procedure if exists pr_param_in;

create procedure pr_param_in

(

in id int -- in 类型的 MySQL 存储过程参数

)

begin

if (id is not null) then

set id = id + 1;

end if;

select id as id_inner;

end; set @id = 10;

call pr_param_in(@id);

select @id as id_out; mysql> call pr_param_in(@id);

+----------+

| id_inner |

+----------+

| 11 |

+----------+

mysql> select @id as id_out;

+--------+

| id_out |

+--------+

| 10 |

+--------+

可以看到:用户变量 @id 传入值为 10,执行存储过程后,在过程内部值为:11(id_inner),但外部变量值依旧为:10(id_out)。

二、MySQL 存储过程参数(out)

MySQL 存储过程 “out” 参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值。 drop procedure if exists pr_param_out;

create procedure pr_param_out

(

out id int

)

begin

select id as id_inner_1; -- id 初始值为 null

if (id is not null) then

set id = id + 1;

select id as id_inner_2;

else

select 1 into id;

end if;

select id as id_inner_3;

end; set @id = 10;

call pr_param_out(@id);

select @id as id_out; mysql> set @id = 10;

mysql>

mysql> call pr_param_out(@id);

+------------+

| id_inner_1 |

+------------+

| NULL |

+------------+

+------------+

| id_inner_3 |

+------------+

| 1 |

+------------+

mysql> select @id as id_out;

+--------+

| id_out |

+--------+

| 1 |

+--------+

可以看出,虽然我们设置了用户定义变量 @id 为 10,传递 @id 给存储过程后,在存储过程内部,id 的初始值总是 null(id_inner_1)。最后 id 值(id_out = 1)传回给调用者。

三、MySQL 存储过程参数(inout)

MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。 drop procedure if exists pr_param_inout;

create procedure pr_param_inout

(

inout id int

)

begin

select id as id_inner_1; -- id 值为调用者传进来的值

if (id is not null) then

set id = id + 1;

select id as id_inner_2;

else

select 1 into id;

end if;

select id as id_inner_3;

end; set @id = 10;

call pr_param_inout(@id);

select @id as id_out; mysql> set @id = 10;

mysql>

mysql> call pr_param_inout(@id);

+------------+

| id_inner_1 |

+------------+

| 10 |

+------------+

+------------+

| id_inner_2 |

+------------+

| 11 |

+------------+

+------------+

| id_inner_3 |

+------------+

| 11 |

+------------+

mysql>

mysql> select @id as id_out;

+--------+

| id_out |

+--------+

| 11 |

+--------+

从结果可以看出:我们把 @id(10),传给存储过程后,存储过程最后又把计算结果值 11(id_inner_3)传回给调用者。 MySQL 存储过程 inout 参数的行为跟 C 语言函数中的引用传值类似。

通过以上例子:如果仅仅想把数据传给 MySQL 存储过程,那就使用“in” 类型参数;如果仅仅从 MySQL 存储过程返回值,那就使用“out” 类型参数;如果需要把数据传给 MySQL 存储过程,还要经过一些计算后再传回给我们,此时,要使用“inout” 类型参数。

总结

以上就是本文关于mysql数据存储过程参数实例详解的全部内容,希望对大家了解MySQL有所帮助。感兴趣的朋友可以继续参阅本站:解析MySQL中存储时间日期类型的选择问题、MySQL 声明变量及存储过程分析等,有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对本站的支持!

mysql数据存储过程详解_mysql数据存储过程参数实例详解相关推荐

  1. oracle out参数查询,Oracle的out参数实例详解

    Oracle的out参数实例详解 一 概念 1.一般来讲,存储过程和存储函数的区别在于存储函数可以有一个返回值:而存储过程没有返回值. 2.过程和函数都可以通过out指定一个或多个输出行.我们可以利用 ...

  2. java显示参数,Java中的隐式参数和显示参数实例详解

    在学习java的过程中,我们会遇到许多的问题.下面我们就来看看什么是隐式参数和显示参数. 显式参数,就是平时见到的在方法名括号中间的参数,就是所谓能看得见的参数www.cppcns.com. 隐式参数 ...

  3. mysql 表数据备份和恢复_mysql 数据备份与恢复

    MySQL数据备份与恢复 #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境.但不能恢复到异构系统中如Windows. #2. 逻辑备份: 备份的是建表.建库.插入等操作所执行SQL语句,适 ...

  4. mysql innodb 的锁机制_Mysql之Innodb锁机制详解

    InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION):二是采用了行级锁.关于事务我们之前有专题介绍,这里就着重介绍下它的锁机制. 总的来说,InnoDB按照不同的分类共有 ...

  5. mysql备份到带库_MySQL数据备份

    MySQL数据备份 一. MySQL数据损坏类型 1.1.物理损坏 磁盘损坏: 硬件,磁道坏,dd,格式化 文件损坏: 数据文件损坏,redo损坏 1.2.逻辑损坏 drop delete trunc ...

  6. mysql二进制日志文件差不多_mysql数据同步-基于二进制日志文件和position复制点的方式...

    mysql的binlog日志有三种格式,分别为statement,mixed,以及row. 1.Statement:每一条会修改数据的sql都会记录在binlog中 优缺点:1)不用记录每一行的变化, ...

  7. mysql表只有frm文件_MYSQL数据文件--.frm文件(只有.frm文件时的表结构恢复)

    了解MYSQL的都知道,在MYSQL中建立任何一张数据表,在其数据目录对应的数据库目录下都有对应表的.frm文件,.frm文件是用来保存每个数据表的元数据(meta)信息,包括表结构的定义等,.frm ...

  8. mysql导到相对位置_MySQL数据备份与恢复

    **无论备份还是恢复,都要验证用户及权限** 一.数据备份 1.数据备份的备份方式 物理备份:cp.tar.tar+gzip  -> 兼容性差,目标地址空间大,耗时 系统自带物理备份工具mysq ...

  9. mysql设计功能设置表_MySQL数据表的设计

    数据表(Table) 数据表是数据库的基本组成元素,以记录(行)和字段(列)组成的二位结构用于储存数据.数据库由表结构和表内容组成,先建立表结构,然后才能输入数据.数据表结构设计主要包括字段名称,字段 ...

最新文章

  1. Visual Studio 2013 Update 2 RTM 发布
  2. C++ Primer 5th笔记(chap 16 模板和泛型编程)函数模板显式实参
  3. PHP Redis 集群封装类
  4. linux搭建环境软raid5
  5. GBK转unicode码查询表
  6. 开发机直连 Docker 中的 Redis 容器小教程
  7. msgpack使用 php_如何使用msgpack进行读写?
  8. 微信小程序一键连接已知wifi
  9. 互联网B端产品设计经验总结
  10. 测试2年6.5K,每天“911”,我的心酸经历只有我自己知道···
  11. 数据分析方法-描述性统计分析
  12. chrome审查元素功能
  13. 如何才能快速成为一名Java架构师?
  14. 32位和64位到底有什么区别?
  15. 5G是什么?5G的关键技术简介
  16. 【STC单片机学习】第十二课 单片机的电机(步进电机)
  17. ubuntu 18.04 单系统u盘装机 简明流程
  18. 如何理解「异或」的含义?
  19. java在regedit找不到_Windows找不到文件regedit打不开注册表怎么解决
  20. 2D/3D人体姿态估计 (2D/3D Human Pose Estimation)

热门文章

  1. Java中三种字符串的拼接(++ , String.format , StringBuilder.append)
  2. vue基础4——自定义指令
  3. 一个基于 SpringBoot 开源的小说和漫画在线阅读网站,简洁大方 !强烈推荐 !
  4. python的panda是什么库_Python的Pandas库简述
  5. P1030求先序排列
  6. 如何让tableView保持顺畅
  7. 《HTML5 2D游戏编程核心技术》——第2章,第2.3节使用CSS背景
  8. JavaScript语言精粹--执行环境及作用域,this
  9. ProtocolBuffer for Objective-C 运行环境配置(真正测试过的)
  10. ViBe(Visual Background extractor)背景建模或前景检测