MySQL中的错误值(SELECT INTO)

时间:2015-07-04 12:42:20

标签: 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;

返回表格中的第一个值。

2 个答案:

答案 0 :(得分:3)

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

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

因此,在运行查询

之前清除变量值总是一个好主意
set @a = null;
SELECT refreshToken.token INTO @a FROM refreshToken WHERE refreshToken.accountId = 2;
SELECT @a;

这应该显示@a为null

答案 1 :(得分:1)

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

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