如何将这些触发器保持在单个触发器中?
我试过了,但我不确定我在做什么错误?
以下是我的触发器
create trigger Disminuir_Existencia1
after insert
on detalle
for each row
update producto set existencia =
existencia-new.Cantidad
where id_p=new.id_p
create trigger Aumentar_Existencia
after insert
on detalle
for each row
update producto set existencia =if( new.activo = 0, producto.existencia +
new.cantidad,producto.existencia)
where new.id_P = producto.id_P
CREATE TRIGGER aumentar
AFTER insert
on detalle
for each row
update factura set total =
(
select producto.precio * new.cantidad
from producto
where new.id_p=producto.id_p)
where new.Folio= factura.folio;
答案 0 :(得分:1)
在您的情况下,正确的解决方案可能取决于您已经尝试过的内容以及尝试的结果。
例如,您可能只需要将UPDATE
语句括在BEGIN ... END
中,这就足够了:
create trigger CombinedDetalleInsertTrigger
after insert
on detalle
for each row
begin
update ... where id_p=new.id_p;
update ... where new.id_P = producto.id_P;
update ... where new.Folio= factura.folio;
end;
但是,在许多情况下,您还需要使用DELIMITER
指令:
delimiter $$
create trigger CombinedDetalleInsertTrigger
after insert
on detalle
for each row
begin
update ... where id_p=new.id_p;
update ... where new.id_P = producto.id_P;
update ... where new.Folio= factura.folio;
end$$
delimiter ;
如this answer中所述。
尽管如此,可能并不总是可以使用DELIMITER
,因为这是客户端指令rather than a MySQL statement,并非所有MySQL客户端都支持它。在这种情况下,您可以尝试遵循this answer的建议:使用allowMultiQueries=true
连接属性或删除最终;
(end
之后的那个)。
答案 1 :(得分:0)
Mysql不支持所有操作的一个触发器,例如sql-server。
你正在以mysql的方式进行。
如果您希望集中代码,您可以使用NEW / OLD信息和事件标识符(I / U / D)从3个不同的触发器创建一个过程并调用相同的过程。