Puede haber varios problemas, pero algunos de ellos no se pueden ver completamente sin ver el contexto de ejecución.
De todos modos hay cosas medio raras, porque ¿para qué defines un trigger sobre un update en la tabla productoVenta, si nunca se invoca a los valores de esa tabla?
¿Por qué operas sobre otras ttablas con acciones que podrías hacer directamente en ellas?
Por otro lado, no existe un objeto, evento, o pseudovariable denominado "inserted" en MySQL. No te olvides que el SQL procedural no está estandarizado, y lo que hagas en un DBMS puede no existir en otro.
Yo te sugeriría que antes de escribir este tipo de rutinas, primero te olvides de lo aprendid , y leaslos manuales de cada DBMS como si fuese la primera vez, escribiendo los ejemplos de ellos sin pensar en "cómo lo haría en...".
En MySQL, al igual que otros DBMS, se puede acceder a los datos entrantes sólo por medio de las pseudovariables NEW (o a los salientes con OLD, pero no en el INSERT).
Bueno, voy a suponer que
pvcantidad y
pvproducto son valores que están entrando en la acción de insertar, por lo que podría ser:
Código SQL:
Ver originalDELIMITER $$
DROP TRIGGER IF EXISTS tg_insertarVenta $$
CREATE TRIGGER tg_insertarVenta ON productoVenta
FOR INSERT
BEGIN
UPDATE producto SET pro_existencia = pro_existencia - NEW.pv_cantidad
WHERE pro_codigo = NEW.pv_producto;
END$$
DELIMITER ;
Ojo: Este script está definido para ser cargado por consola. Si lo haces de otro modo debes quitarle las sentencias "DELIMITER".