MySQL TRIGGER奇怪的行为

时间:2014-09-03 14:42:01

标签: mysql sql database

大家好我在触发器的某个时刻有以下代码。 (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。

1 个答案:

答案 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_前缀)。