【问题标题】:SQL - user-defined variables & client session confusion?SQL - 用户定义的变量和客户端会话混乱?
【发布时间】:2015-07-01 07:38:51
【问题描述】:

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

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 这样的变量,我必须一直让计算机保持开启状态吗?

这可能是一个愚蠢的问题,但我真的很困惑,所以任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: mysql sql session stored-procedures scope


    【解决方案1】:

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

    【讨论】:

    • 谢谢!这更有意义。但我想我的问题确实是什么构成了session,我将编辑我的问题以使其更清楚。程序完成后会话是否结束?或者当我关闭运行查询的计算机时会话是否结束?是第一个吧?
    • 会话仅在您退出开发环境时结束。更具体地说,如果您打开了多个选项卡,则每个选项卡都构成自己的会话。
    猜你喜欢
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多