Magnífico, ahora bie, hagamos una pequeña aclaración para estar seguro que la explicación de los TRIGGERs se comprende:
Si, es cierto que son rutinas almacenadas, pero tienen algunas restricciones que deben seguirse al pié de la letra o te encontrarás con serios problemas de lógica, implementación y resultados:
- Los triggers son rutinas almacenadas que no se pueden invocar bajo ninguna circunstancia. Sólo se disparan ante ciertos eventos: inserciones (INSERT), actualizaciones (UPDATE) y borrados (DELETE).
- No reciben ningún tipo de parámetros. Sólo INSERT y UPDATE contienen una pseudovariable (NEW) que es en realidad una referencia al registro entrante, y que contiene los campos del registro que ingresa. UPDATE tiene otra que es OLD y que representa una referencia al estado actual del registro a actualizar.
- No devuelven datos de ningún tipo ni clase. Solamente pueden devolver valores en variables de usuario de tipo global.
- Pueden invocar operaciones DML sobre otras tablas, pero no se pueden realizar contra la propia tabla que lo disparó, ni contra tablas que a su vez tengan triggers que intenten realizar tareas en propia tabla. Esto es: Si el trigger T1 de la tabla A intenta acceder a la tabla B para hacer u INSERT/UPDATE/DELETE, y la tabla B tiene el trigger T2 que debe hacer un INSERT/UPDATE/DELETE en la tabla A, esto no se puede realizar. La razón es simple: Un TRIGGER bloquea su tabla para escritura, y además MySQL aún no da soporte a rutinas recursivas.
- No se puede crear dos triggers para el mismo evento en la misma tabla. Si existe más de una tarea a realizar en mismo evento deben hacerse todas en el mismo.
- No se puede usar un trigger para formatear o validar datos previo a la inserción o actualización, si los datos recibidos en la pseudovariable NEW no cumplen con las restricciones de dominio del campo. Esto es porque esas restricciones se verifican antes de que el trigger inicie su ejecución, sea esto BEFORE o AFTER el evento.
Creo que hay algunas otras restricciones, pero esas son las más importantes en este momento.