2013-02-15 259 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是另一个覆盖这个问题的问题。