0

我需要在我的数据库中创建一个触发器。触发器必须能够在插入之前分析事件。如果数据库中已经存在的最后一个事件具有相同的状态,则触发器必须取消插入并更新最后一个事件。

我试图创建一个,但由于 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

谢谢你的帮助

问候,

多琳·M。

4

3 回答 3

0

在创建这样的触发器之前,您必须更改 DELIMITER

DELIMITER $$
CREATE TRIGGER... 
...
END;
$$
DELIMITER ;
于 2013-02-15T10:34:43.783 回答
0

您可能不需要为此实现触发器。您描述的操作正式称为UPSERT,即更新或插入。

就是它在 MySQL 中的完成方式,您也可以查看REPLACE

是另一个涉及此问题的问题。

于 2013-02-15T10:35:06.410 回答
0

您将需要分隔您的创建语句:

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

并且您可能需要为声明的每个变量定义一个类型,例如

DECLARE x INT;

于 2013-02-15T10:40:40.570 回答