Zon*_*Zon 10 mysql session-variables
情况:MySQL查询使用从外部传递的值.这是通过声明和初始化会话变量来完成的,该会话变量在会话结束前一直有效:
SET @id = 0;
SELECT * FROM my_table
WHERE id = @id;
Run Code Online (Sandbox Code Playgroud)
问题:在查询完成后删除会话变量是一个好习惯(出于安全原因)?最合适的方法是什么?
研究:我发现了以下建议,但有一些疑问,因为它看起来像"uninitialise",而不是像"undeclare":
SET @id = NULL;
Run Code Online (Sandbox Code Playgroud)
使用会话变量传递参数是一种不好的做法(使用全局变量通常表示代码气味).因此,没有足够或推荐的方法来处理您的情况(1).
你评论说:
使用名称参数比使用"?"放置参数更灵活,因为添加/删除变量不需要在代码中更改顺序.
这是一种幻觉.使用这种方法,您仍然需要记录"某处",您的过程需要在调用之前声明一些变量.这也介绍了您要解决的问题.
另一方面,存储过程(或准备好的语句)是自我记录的,并且参数具有众所周知的范围和寿命.
现在,回答具体问题:
如何删除/取消设置会话变量?
SET @id = NULL;是唯一的出路.您不能"取消声明"会话变量,因为您无法"声明"会话变量(尝试SELECT @dummy_variable_never_declared_before;).MySQL会话变量与shell环境变量非常相似.(2)
(1) ......除非你确定会议结束后会议结束.关闭会话肯定会清除所有会话变量.
(2)我了解到bash会话变量确实可以取消设置.