You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中IN参数特性存疑:为何存储过程内修改后原值变化?

MySQL存储过程IN参数的传值语义误区

你对IN参数的理解没错——MySQL里的IN参数确实是传值调用,存储过程内部修改参数值不会影响外部的原始变量。但你的测试方法有问题,导致误解了结果:

你调用存储过程时传的是字面量1,不是一个外部变量。此时存储过程内部的myParameter只是这个字面量的副本,你看到的ModifiedValue=2只是副本的变化,外部根本没有对应的变量会被修改,自然不存在“原参数值从1变为2”的情况。

要验证IN参数的传值特性,应该用外部变量来测试:

-- 定义外部变量并赋值
SET @external_var = 1;
-- 查看调用前变量值
SELECT @external_var AS '调用前变量值';

-- 调用存储过程,传入外部变量
CALL MyProcedure(@external_var);

-- 查看调用后变量值,确认未被修改
SELECT @external_var AS '调用后变量值';

运行这段代码会发现:调用前后@external_var的值始终是1,只有存储过程内部的myParameter副本被改成了2,这才符合IN参数“原始值保留”的特性。

总结一下:

  • IN参数的修改仅作用于存储过程内部的副本,不会影响外部传入的变量
  • 直接传字面量时,不存在“外部原始值”,所以看不到保留效果,需要用外部变量测试

内容的提问来源于stack exchange,提问作者Satish Ryali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:04:56