2014-09-03 3 views
0

안녕하세요 여러분, 제 트리거의 일부 지점에서 다음 코드를 가지고 있습니다. (INSERT 트리거 이후) 내가 다음 코드를 사용하여 어떤 점에서MySQL 트리거 이상한 동작

DECLARE Interv int; 

에게 :

SELECT myfield FROM TABLE WHERE interv=new.interv 

그러나 분명히 MySQL이 두 변수의 값이 혼란 (NEW.INTERV AND INTERV) 및 본건 나에게 올바른 쿼리의 값을 반환합니다.

그러나 DECLARE Interv int 대신 DECLARE Interv_Value int을 사용하면 SELECT이 문제없이 작동합니다.

아이디어가 있으십니까? 나는 MySQL 5.1.68을 사용하고있다.

+1

테이블에 실제로 'interv' 필드가 있습니까? 그렇다면, mysql이 혼란스러워지는 것은 당연합니다. 테이블 필드와 동일한 변수 이름을 지정하면 실제 필드가 동일한 이름의 변수보다 우선합니다. –

답변

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_입니다).

+0

고마워요, 이제 잘 작동합니다! –