大家好我在触发器的某个时刻有以下代码。 (INSERT TRIGGER之后)
DECLARE Interv int;
在某些时候我使用以下代码:
SELECT myfield FROM TABLE WHERE interv=new.interv
但显然mysql会混淆两个变量(NEW.INTERV AND INTERV)
的值,并且不会返回正确的查询值。
但是,如果我使用DECLARE Interv_Value int
代替DECLARE Interv int
,则问题SELECT
可以正常使用。
有什么想法吗?我正在使用MySQL 5.1.68。
答案 0 :(得分:0)
令人困惑的是什么?
当您有查询时:
SELECT myfield
FROM TABLE
WHERE interv = new.interv;
然后MySQL必须弄清楚所有不合格的名字来自哪里。它有一些规则。在这种情况下:
- First look at the columns in the `FROM` clause.
- Then it look in the environment
(这些实际上是作用域规则,也涉及子查询。)因此,您的查询被解释为:
SELECT myfield
FROM TABLE
WHERE table.interv = new.interv;
作为一般规则,使用表别名编写查询以指定列的来源。所以上面的查询可以写成:
SELECT myfield
FROM TABLE t
WHERE t.interv = new.interv;
虽然你真的不想要这个版本。
如果要使用变量,请使用带有@
的用户定义变量,或者给出不太可能与列名冲突的变量名称(我使用v_
前缀)。