在同一个sintaxis中DROP和CREATE相同的触发器

时间:2014-08-18 17:13:14

标签: php mysql triggers heidisql

虚拟问题:拥有MySQL中的下一个代码,但是当在HeidiSQL中运行它时,在'// CREATE TRIGGER'附近显示一个sintaxis错误。我不确定是否会发生因为触发器不存在。这是代码:

DROP TRIGGER IF EXISTS oportunidades_movimiento_entregado //
CREATE TRIGGER oportunidades_movimiento_entregado;
AFTER INSERT ON historial_entregado
FOR EACH ROW BEGIN
UPDATE oportunidades
SET oportunidades.fechaModificado = NEW.fecha_creacion
WHERE NEW.oportunidad_id = oportunidades.id;
END//

更新

DELIMITER $$
DROP TRIGGER IF EXISTS oportunidades_movimiento_entregado $$
CREATE TRIGGER oportunidades_movimiento_entregado
AFTER INSERT ON historial_entregado
FOR EACH ROW BEGIN
UPDATE oportunidades
SET oportunidades.fechaModificado = NEW.fecha_creacion
WHERE NEW.oportunidad_id = oportunidades.id;
END; $$
DELIMITER //

这有效,但现在我怀疑是......所有代码(DROP和CREATE)都会每次都运行,或者只是CREATE?我需要这个,因为我正在使用2个表,其中一个我插入/更新数据,然后使用触发器插入另一个表中的一些列以保持历史记录,但是当我在进行INSERT或UPDATE查询时第一个表,MySQL显示错误#1442

  

无法更新存储/函数触发器中的表oportunidades,因为它已被调用此存储函数/触发器的语句使用。

1 个答案:

答案 0 :(得分:0)

要使其正常工作,请先设置分隔符,然后在CREATE TRIGGER语句后重置它。 删除CREATE TRIGGER行末尾的分号。

这应该有效:

DELIMITER //
DROP TRIGGER IF EXISTS oportunidades_movimiento_entregado //

CREATE TRIGGER oportunidades_movimiento_entregado    -- no trailing semicolon here
    AFTER INSERT ON historial_entregado
    FOR EACH ROW BEGIN
        UPDATE oportunidades
        SET oportunidades.fechaModificado = NEW.fecha_creacion
        WHERE NEW.oportunidad_id = oportunidades.id;
    END//

DELIMITER ;