2013-02-15 2 views
0

데이터베이스에 트리거를 만들어야합니다. 트리거는 삽입 전에 이벤트를 분석 할 수 있어야합니다. 데이터베이스에 이미있는 마지막 이벤트가 동일한 상태 인 경우 트리거는 삽입을 취소하고 마지막 이벤트를 업데이트해야합니다. 삽입 전에 MySQL 및 트리거

나는 하나를 만들려고하지만 난 때문에 MySQL의 오류로 내 데이터베이스에 추가 할 수 없습니다 :

다음
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5 

트리거 :

: 여기

CREATE TRIGGER events_before_insert 
BEFORE INSERT ON monitoringV2.events 
FOR EACH ROW 
BEGIN 
DECLARE id_last_event; 
DECLARE status_last_event; 

SELECT id INTO id_last_event, status INTO status_last_event FROM events WHERE module_id=NEW.module_id ORDER BY serverDate DESC LIMIT 1; 

IF NEW.status = status_last_event THEN 
UPDATE events SET serverDate=NOW() WHERE id=id_last_event; 
signal sqlstate '00000' set message_text = "Update instead of insert"; 
END IF; 
END; 

정보 서버입니다

PHP 5.4.6 VC9 
Apache 2.4.2 VC9 
MySQL 5.5.27 
PhpMyAdmin 3.5.2.2 

도움 주셔서 감사합니다.

감사

Dorine M.

답변

0

당신은 당신의 생성 문 구분해야합니다

delimiter //
CREATE...
...
END;
//
DELIMITER ;

그리고 당신은 아마 각 선언 된 변수, 예를 들면의 유형을 정의해야합니다

DECLARE x INT;

0

당신은 당신이에 대한 트리거를 구현할 필요하지 않을 수도 있습니다이

DELIMITER $$ 
CREATE TRIGGER... 
... 
END; 
$$ 
DELIMITER ; 
0

같은 트리거를 작성하기 전에 DELIMITER을 변경해야합니다. 설명하는 작업은 공식적으로 UPSERT (업데이트 또는 삽입)로 알려져 있습니다.

This은 MySQL에서 어떻게 수행되었으며, REPLACE을 볼 수도 있습니다.

Here이 문제를 다루는 또 다른 질문입니다.

관련 문제