所以我在存储过程中有一些用户定义的变量,它看起来像这样:
CREATE DEFINER=`rsgarci1`@`%` PROCEDURE `closestTimestampSun`()
BEGIN
OPEN tstamp_cursor;
get_timestamp: LOOP
SELECT @MID:=m.vID, @MX:=m.x , @MY:=m.y , @MT:=m.timestamp FROM movementSunTemp2 m
WHERE m.vID = cSID
AND m.timestamp = (SELECT MAX(T.timestamp)
FROM (SELECT mm.timestamp FROM movementSunTemp2 mm WHERE mm.vID = cSID AND mm.timestamp <= ctstamp)AS T);
INSERT INTO sunFromLocation(`ctimestamp`,`cID`,`vID`,`x`,`y`,`mtimestamp`)
VALUES(ctstamp,cSID,@MID,@MX,@MY,@MT);
END LOOP get_timestamp;
close tstamp_cursor;
END
我在中间切了一下,但这就是它的要点。
根据它上面的mySQL Page说:
用户定义的变量是特定于会话的。也就是说,其他客户端无法看到或使用由一个客户端定义的用户变量。当客户端退出时,将自动释放给定客户端会话的所有变量。
这到底是什么意思?我是SQL的新手,所以我真的很困惑究竟是什么构成了“用户会话/客户端”。程序退出时客户端会话是否结束?当我关闭运行查询的计算机时它会结束吗?那么如果我想在查询中使用@variable
之类的变量,我必须保持计算机的整个时间吗?
这可能是一个愚蠢的问题,但我真的很困惑,所以任何帮助都会非常感谢,谢谢!
答案 0 :(得分:1)
用户会话特定于您正在使用的客户端 - 在这种情况下是MySQL开发环境。连接到同一数据库的其他人无法访问您在会话中定义的变量。关闭会话后,变量的生命周期将过期。如果在过程中定义变量,则只能在过程中访问它们,因为它们的范围是过程本身。