我在MySQL中调试存储过程,我不知道我的错误在哪里。我有以下代码:
SELECT refreshToken.token FROM refreshToken WHERE refreshToken.accountId = 2;
此代码返回一个空集。但是这段代码:
SELECT refreshToken.token INTO @a FROM refreshToken WHERE refreshToken.accountId = 2;
SELECT @a;
返回表格中的第一个值。
答案 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;