gpt4 book ai didi

php - 在相同的符号中删除和创建相同的触发器

转载 作者:行者123 更新时间:2023-11-29 23:55:48 26 4
gpt4 key购买 nike

虚拟问题:在 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

Can't update table oportunidades in stored/function trigger because it's already used by statement which invoked this stored function/trigger.

最佳答案

要使其正常工作,请先设置分隔符,然后在 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 ;

关于php - 在相同的符号中删除和创建相同的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25368610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com