SQL - 用户定义的变量&客户会话混乱?

时间:2015-06-30 23:27:31

标签: mysql sql session stored-procedures scope

所以我在存储过程中有一些用户定义的变量,它看起来像这样:

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之类的变量,我必须保持计算机的整个时间吗?

这可能是一个愚蠢的问题,但我真的很困惑,所以任何帮助都会非常感谢,谢谢!

1 个答案:

答案 0 :(得分:1)

用户会话特定于您正在使用的客户端 - 在这种情况下是MySQL开发环境。连接到同一数据库的其他人无法访问您在会话中定义的变量。关闭会话后,变量的生命周期将过期。如果在过程中定义变量,则只能在过程中访问它们,因为它们的范围是过程本身。