【问题标题】:MySQL wrong value in variable (SELECT INTO)MySQL 变量中的值错误(SELECT INTO)
【发布时间】:2015-07-04 12:42:20
【问题描述】:

我正在调试 MySQL 中的存储过程,但我不知道我的错误在哪里。我有以下代码:

SELECT refreshToken.token FROM refreshToken WHERE refreshToken.accountId = 2;

此代码返回一个空集。但是这段代码:

SELECT refreshToken.token INTO @a FROM refreshToken WHERE refreshToken.accountId = 2;
SELECT @a;

返回表中的第一个值。

【问题讨论】:

  • 在明确清除@a 的值后尝试运行查询。设置@a= null;
  • @Akhil 谢谢,就是这样。如果你把它作为答案,我可以给你一些分数......

标签: mysql sql select stored-procedures


【解决方案1】:

这是因为@a 已经用一些值初始化了。

当查询返回空记录时,全局变量将保留其先前的值。

所以在运行查询之前清除变量值总是一个好主意

set @a = null;
SELECT refreshToken.token INTO @a FROM refreshToken WHERE refreshToken.accountId = 2;
SELECT @a;

这应该将@a 显示为空

【讨论】:

    【解决方案2】:

    这是为了补充 Akhil 的答案(这是正确的)。使用会话变量是危险的,因为它们已经可以被初始化。每次使用它们时初始化它们更安全,一种方法是在查询本身中进行:

    SELECT @a := refreshToken.token
    FROM refreshToken CROSS JOIN
         (SELECT @a := NULL) params
    WHERE refreshToken.accountId = 2;
    

    【讨论】:

      猜你喜欢
      • 2011-03-05
      • 2016-07-26
      • 2011-02-26
      • 1970-01-01
      • 2021-06-09
      • 2017-08-20
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      相关资源
      最近更新 更多