嗨,大家好,我在触发点上有以下代码。 (插入触发器后)
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。
最佳答案
对此有什么困惑?
当您有查询时:
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_
前缀)。