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 М.

ответ

0

Вам нужно будет разграничить ваш создать заявление:

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

и вы, вероятно, необходимо определить тип для каждой переменной, объявленной, например,

DECLARE x INT;

0

Вы должны изменить разделитель перед созданием триггера, как этого

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

Вы, возможно, не нужны реализовать триггер для этого. Операция, которую вы описываете, официально известна как UPSERT, то есть обновление или вставка.

This как это делается в MySQL, и вы также можете посмотреть REPLACE.

Here - еще один вопрос, охватывающий это.