MySQL变量中的值错误(选择到)

MySQL变量中的值错误(选择到),mysql,sql,select,stored-procedures,Mysql,Sql,Select,Stored Procedures,我正在调试MySQL中的一个存储过程,我不知道我的错误在哪里。我有以下代码: SELECT refreshToken.token FROM refreshToken WHERE refreshToken.accountId = 2; 此代码返回一个空集。但是这个代码: SELECT refreshToken.token INTO @a FROM refreshToken WHERE refreshToken.accountId = 2; SELECT @a; 返回表中的第一个值。这是因为@a

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

SELECT refreshToken.token FROM refreshToken WHERE refreshToken.accountId = 2;
此代码返回一个空集。但是这个代码:

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

返回表中的第一个值。

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

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

因此,在运行查询之前清除变量值始终是一个好主意

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

这应该将@a显示为空

这是为了添加到Akhil的答案中(这是正确的)。使用会话变量是危险的,因为它们已经可以初始化了。无论何时使用它们,都可以更安全地初始化它们,其中一种方法是在查询本身中进行初始化:

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

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