Primero: No dupliques temas. Ya habías abierto otro para este asunto (
Trigger before insert).
Segundo:
No se puede hacer una operación DML (INSERT/UPDATE/DELETE) dentro de un trigger,
contra la misma tabla que posee el trigger. La tabla está bloqueada para escritura, por lo que no funcionará.
Esto tiene su razón de ser: Si un trigger es invocado en el INSERT y hace un INSERT a la misma tabla, ese segundo disparará otra vez el trigger, que a su vez intentará insertar los datos... y así hasta el infinito. ¿Se comprende?
Tercero: En MySQL los triggers no son opcionales, lo que significa que
no puedes detener su ejecución. Entonces no podrías hacer algo que apruebe o no la operación, por lo que si lo enviaste a insertar, lo intentará o fallará.
Cuarto: Es absurdo usar un trigger para
validar la misma operación que lo dispara. Las validaciones se hacen
antes de intentar insertar. No durante el INSERT.
No tiene ningún sentido intentar la operación si los datos no han sido verificado, es una pésima práctica.
Toda validación de datos se hace
en la aplicación y consultando a la base, pero cuando se envía a insertar, es
terminal. No debe agregar ninguna validación más.
Es muy propio de programadores tratar de darle a la base esas responsabilidades, simplemente para no tener que hacer lo que deben en la aplicación.