aar*_*ona 1 mysql variables session-scope
好的,基于我问的最后一个问题,Mysql如何处理以下代码中的where语句:
DELIMITER ;//
DROP PROCEDURE IF EXISTS `test`;//
CREATE PROCEDURE `test`
(
id INT
)
BEGIN
SELECT *
FROM some_table
WHERE id = id;
END;//
Run Code Online (Sandbox Code Playgroud)
在这种情况下MySQL会做什么?它是否将where子句视为
some_table.id = id
Run Code Online (Sandbox Code Playgroud)
或者它是否像对待它一样
some_table.id = some_table.id
Run Code Online (Sandbox Code Playgroud)
现在我正在做类似的事情
WHERE id = @id
Run Code Online (Sandbox Code Playgroud)
因为我不知道MySQL中有会话变量而且它没有抱怨,我认为这是一种明确的方式来说"这个列等于这个变量".
有些人可能会说"呃..当然它把它当作列=变量",但我可以很容易地说"变量=列".那怎么处理呢?
Ste*_*rig 11
首先看一下MySQL的变量命名模式有点奇怪.通常,MySQL区分三种类型的变量:
因此,命名冲突(例如上面提到的冲突)仅出现在存储的程序中.因此,您首先应该尝试通过分配明确的参数名称来避免这些命名冲突,例如通过使用p诸如预先伪装参数pId.如果MySQL遇到歧义,它会将引用解释为变量的名称(参见此处):
[...]局部变量名称不应与列名称相同.如果SQL语句(如
SELECT ... INTO语句)包含对列的引用和声明的具有相同名称的局部变量,则MySQL当前会将该引用解释为变量的名称.[...]
目前的措辞在某种程度上给人的印象是,这种行为可能会在未来版本中发生变化.