虚拟问题:拥有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
,因为它已被调用此存储函数/触发器的语句使用。
答案 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 ;