2012-09-21 2 views
1

MySQL의 두 데이터베이스에서 트리거를 만들 수있는 방법이 있습니까? 내 요구 사항은 같다 : -MySQL에서 두 개의 다른 데이터베이스에 대한 트리거를 작성하고 싶습니다

database: test1 -> table: tmp1 
database: test2 -> table: tmp2 

가 지금은 TEST1 삽입 조작에 트리거를 사용해야 할 값이 TEST2 데이터베이스의 tmp2에 삽입하는 tmp1에 발생합니다. 그리고 또한 한 구절. 즉, test1 데이터베이스의 tmp1 테이블에 tmp2에 삽입하면 test2 데이터베이스의 tmp2 테이블에 트리거가 하나 더 추가됩니다.

나는 둘 다 트리거를 작성하려고했지만 루프가 서로 다른 테이블을 삽입한다고 생각합니다.

DELIMITER $$ 
CREATE TRIGGER trigger_ad_t1 AFTER insert ON `test1`.tmp1 
FOR EACH ROW 
Begin 
    INSERT INTO `test2`.tmp2 VALUES (NEW.employeeNumber,New.fname,New.lname) 
END$$ 
DELIMITER ; 

tmp2 테이블에 삽입 한 후 tmp1에 삽입하기 위해 작성된 동일한 유형의 트리거입니다.

MySQL 5.1.63을 사용하는 로컬 PC에서이 트리거를 테스트 한 번 더하지만, MySQL 5.0.45를 사용하는 테스트 서버에서이 트리거를 사용하려고하면 구문 오류 (1064)가 발생합니다. 문제가 무엇인지 모릅니다.

UPDATE :

With delimeter without delimeter

아무도 도와 줄 수는 그것을 제거합니다.

감사합니다.

+0

없는 결과 =>
EXISTS(SELECT * FROM ...)의 수를 포함하는 하나 개의 레코드를 반환? – pkachhia

답변

1

트리거에 정규화 된 테이블 이름을 사용하십시오.
즉,
db1.test1.*d2.test2.*

P. SQL을 한 번 더 살펴본 후에 나는 당신이 ARE을 이미 수행하고 있다는 것을 깨달았습니다.

편집 :

이 이 이

이 편집 코드 :

IF NOT EXISTS(SELECT employeeNumber FROM otherDB.otherTable WHERE employeeNumber = NEW.employeeNumber) THEN 
INSERT INTO otherDB.otherTable VALUES (NEW.employeeNumber,New.fname,New.lname) 
END IF; 

보정이 필요하다고 설명 필드는 끝없는 삽입 루프를 방지하는 방법 (을 employeeNumber는 고유 키를 가정), 그래서 여기에 코드를 게시 할 수 제한에이다 코드에서 원래 제공 : ... EXISTS(SELECT * FROM otherDB.otherTable ...)
... EXISTS(SELECT employeeNumber FROM otherDB.otherTable ...)
첫 번째 쿼리가 항상 있기 때문에 true가 반환되는 이유로 대체 내부 쿼리 SELECT * FROM ... 항상 내 문제를 해결할 수있다 아무도 항상 true

+0

답장을 보내 주셔서 감사합니다. 한 데이터베이스에만 적용했을 때 트리거가 올바르게 작동하지만 두 데이터베이스에서 같은 종류의 트리거를 작성하면 오류가 발생합니다. – pkachhia

+0

'insert' 문에'exists' 형 체크를 덧붙여 야합니다. –

+0

이런 식으로 작성해야한다는 것을 알고 있습니다 만, 방아쇠를하기에는 새롭기 때문에 간략하게 설명 할 수 있습니까? – pkachhia

관련 문제