[sql] view plain copy
MySQL存储过程中有IN,OUT,INOUT类型 ----------------------------------- ## IN IN参数只用来向过程传递信息,为默认值。 ## MySQL存储过程"in"参数:跟C语言的函数参数的值传递类似,MySQL存储过程内部可能会修改此参数, ## 但in类型参数的修改对调用者(caller)来说是不可见的(not visible) mysql>use test; mysql> drop procedure if exists pr_param_in; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> delimiter // mysql> create procedure pr_param_in(in id int) -> begin -> if (id is not null) then -> set id=id+1; -> end if; -> select id as id_inner; -> end; -> // Query OK, 0 rows affected (0.03 sec) mysql> delimiter ; mysql> set @id=10; Query OK, 0 rows affected (0.00 sec) mysql> call pr_param_in(@id); +----------+ | id_inner | +----------+ | 11 | +----------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) mysql> select @id as id_out; +--------+ | id_out | +--------+ | 10 | +--------+ 1 row in set (0.00 sec) ## 可以看到用户变量@id传入值为10,执行存储过程后,在过程内部值为:11(id_inner), ## 但外部变量值依旧为:10(id_out)
[sql] view plain copy
<pre name="code" class="sql">================================================================================== ## OUT OUT参数只用来从过程传回信息。 ## MySQL存储过程"out"参数:从存储过程内部传值给调用者。 ## 在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值。 mysql> drop procedure if exists pr_param_out; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> delimiter // mysql> create procedure pr_param_out(out id int) -> begin -> select id as id_inner_1; -> 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; -> // Query OK, 0 rows affected (0.01 sec) mysql> delimiter ; mysql> set @id=10; Query OK, 0 rows affected (0.00 sec) mysql> call pr_param_out(@id); +------------+ | id_inner_1 | +------------+ | NULL | +------------+ 1 row in set (0.01 sec) +------------+ | id_inner_3 | +------------+ | 1 | +------------+ 1 row in set (0.01 sec) Query OK, 0 rows affected (0.01 sec) mysql> select @id as id_out; +--------+ | id_out | +--------+ | 1 | +--------+ 1 row in set (0.00 sec) ## 可以看出,虽然我们设置了用户定义变量@id为10,传递@id给存储过程后,在存储过程内部, ## id的初始值总是 null(id_inner_1)。最后id值(id_out=1)传回给调用者。 =================================================================================== ## INOUT INOUT参数可以向过程传递信息,如果值改变,则可再从过程外调用。 ## MySQL存储过程"inout"参数跟out类似,都可以从存储过程内部传值给调用者。 ## 不同的是:调用者还可以通过inout参数传递至给存储过程。 mysql> drop procedure if exists pr_param_inout; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> delimiter // mysql> create procedure pr_param_inout(inout id int) -> begin -> select id as id_inner_1; -> 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; -> // Query OK, 0 rows affected (0.01 sec) mysql> delimiter ; mysql> set @id=10; Query OK, 0 rows affected (0.00 sec) mysql> call pr_param_inout(@id); +------------+ | id_inner_1 | +------------+ | 10 | +------------+ 1 row in set (0.00 sec) +------------+ | id_inner_2 | +------------+ | 11 | +------------+ 1 row in set (0.00 sec) +------------+ | id_inner_3 | +------------+ | 11 | +------------+ 1 row in set (0.01 sec) Query OK, 0 rows affected (0.01 sec) mysql> select @id as id_out; +--------+ | id_out | +--------+ | 11 | +--------+ 1 row in set (0.00 sec) ## 从结果可以看出:我们把 @id(10)传给存储过程后,存储过程最后又把计算结果值11(id_inner_3) ## 传回给调用者。MySQL存储过程inout参数的行为跟C语言函数中的引用传值类似。 ========================================================================================= 通过以上例子: 1) 如果仅仅想把数据传给MySQL存储过程,那就用in类型参数; 2) 如果仅仅从MySQL存储过程返回值,那就用out类型参数; 3) 如果需要把数据传给MySQL存储过程经过计算再传回给我们,那就用inout类型参数。
以上是如何理解MySQL中的IN,OUT,INOUT类型的详细内容。更多信息请关注PHP中文网其他相关文章!

如何有效监控MySQL性能?使用mysqladmin、SHOWGLOBALSTATUS、PerconaMonitoringandManagement(PMM)和MySQLEnterpriseMonitor等工具。1.使用mysqladmin查看连接数。2.用SHOWGLOBALSTATUS查看查询数。3.PMM提供详细性能数据和图形化界面。4.MySQLEnterpriseMonitor提供丰富的监控功能和报警机制。

MySQL和SQLServer的区别在于:1)MySQL是开源的,适用于Web和嵌入式系统,2)SQLServer是微软的商业产品,适用于企业级应用。两者在存储引擎、性能优化和应用场景上有显着差异,选择时需考虑项目规模和未来扩展性。

在需要高可用性、高级安全性和良好集成性的企业级应用场景下,应选择SQLServer而不是MySQL。1)SQLServer提供企业级功能,如高可用性和高级安全性。2)它与微软生态系统如VisualStudio和PowerBI紧密集成。3)SQLServer在性能优化方面表现出色,支持内存优化表和列存储索引。

mySqlManagesCharacterSetsetSandCollationsyutusututf-8asthEdeFault,允许ConfigurationAtdataBase,table和columnlevels,AndrequiringCarefullageLignmentToavoidMismatches.1)setDefeaultCharactersetTercharactersetEtCollacterSeteTandColletationForAdataBase.2)conformentcollecharactersettersetertersetcollatertersetcollationcollation

MySQL触发器是与表相关联的自动执行的存储过程,用于在特定数据操作时执行一系列操作。1)触发器定义与作用:用于数据校验、日志记录等。2)工作原理:分为BEFORE和AFTER,支持行级触发。3)使用示例:可用于记录薪资变更或更新库存。4)调试技巧:使用SHOWTRIGGERS和SHOWCREATETRIGGER命令。5)性能优化:避免复杂操作,使用索引,管理事务。

在MySQL中创建和管理用户账户的步骤如下:1.创建用户:使用CREATEUSER'newuser'@'localhost'IDENTIFIEDBY'password';2.分配权限:使用GRANTSELECT,INSERT,UPDATEONmydatabase.TO'newuser'@'localhost';3.修正权限错误:使用REVOKEALLPRIVILEGESONmydatabase.FROM'newuser'@'localhost';然后重新分配权限;4.优化权限:使用SHOWGRA

MySQL适合快速开发和中小型应用,Oracle适合大型企业和高可用性需求。1)MySQL开源、易用,适用于Web应用和中小型企业。2)Oracle功能强大,适合大型企业和政府机构。3)MySQL支持多种存储引擎,Oracle提供丰富的企业级功能。

MySQL相比其他关系型数据库的劣势包括:1.性能问题:在处理大规模数据时可能遇到瓶颈,PostgreSQL在复杂查询和大数据处理上表现更优。2.扩展性:水平扩展能力不如GoogleSpanner和AmazonAurora。3.功能限制:在高级功能上不如PostgreSQL和Oracle,某些功能需要更多自定义代码和维护。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3汉化版
中文版,非常好用

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)