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 originalDELIMITER $$
SET almacen.stock
= almacen.stock
- NEW.cant_articulos
WHERE almacen.cod_articulo
= NEW.cod_articulo
; DELIMITER;
Eso suponiendo que el id del articulo se llama así...