Es simplísimo. El propio MySQL te lo está diciendo: No puedes hacer una operación DML contra la misma tabla donde se está ejecutando el TRIGGER.
Para acceder al registro que está entrando debes usar las pseudovariables NEW u OLD.
Código MySQL:
Ver originalDELIMITER $$
SETNEW. total= NEW.cantidad * NEW.precio_unitario;
$$
DELIMITER ;
Ahora bien, conceptualmente hablando, es un trigger inútil por dos razones:
1) No se deben almacenar valores calculables en una base. Implica almacenar datos innecesarios, requieren mantenimiento de consistencia, y además cálculos como este se hacen en la consulta SELECT directamente sin pérdida de performance (y con los datos actualizados).
2) Aún si lo quisieras hacer, ¿por qué no pones ese cálculo en el INSERT? El resultado sería el mismo.
Como digo, si lo que quieres es probar cómo funciona un TRIGGER, hazlo, pero no implementes algo así cuando estés trabajando en serio.