Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/11/2011, 06:01
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema al modificar Trigger

No puedes quitar el "FOR EACH ROW" poruna razón básica y sencilla: es parte del trigger desde el momento en que un trigger se ejecuta con todos y cada uno de los registros impactados por el evento, que en este caso es un INSERT. Además, ten en cuenta que el FOR EACH se refiere a la tabla del TRIGGER y no a la que pones en el cuerpo (almacen).
Tu problema base es que no estás poniendo una condición WHERE a ese UPDATE dentro del TRIGGER. Por eso te afecta a todos los registros.
Lo que debes hacer es, en todo caso, usar el ID del registro entrante para hacer esa actualización:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE TRIGGER articulos_vendidos AFTER INSERT ON art_ventas
  3.     DROP TRIGGER IF EXISTS `base_de_datos`.`articulos_vendidos`;
  4.     UPDATE almacen
  5.     SET almacen.stock = almacen.stock -  NEW.cant_articulos
  6.     WHERE almacen.cod_articulo = NEW.cod_articulo;
  7. END$$
  8. DELIMITER;
Eso suponiendo que el id del articulo se llama así...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)