Cómo crear un disparador sql

Se crea un desencadenador de SQL, como es lógico, con un CREATE TRIGGER

comunicado. Una vez creado el gatillo, se encuentra a la espera - a la espera de que se produzca el hecho determinante. Cuando se produce el evento de activación, ¡bang! Los fuegos del disparador.

La sintaxis de la CREATE TRIGGER declaración es bastante complicado, pero se puede dividirlo en trozos comprensibles. Primero eche un vistazo a la imagen global:

CREATE TRIGGER trigger_nametrigger_action_timetrigger_eventON nombre_tabla [REFERENCIA old_or_new_value_alias_list] triggered_action

El nombre del disparador es el identificador único para este disparador. El tiempo de activación es el tiempo que desea que la acción activada que se produzca: o ANTES DE o DESPUÉS el evento desencadenante. El hecho de que se puede producir una acción activada antes de el caso de que supuestamente está causando que suceda puede parecer un poco extraño, pero en algunos casos, esta capacidad puede ser muy útil.

Debido a que el motor de base de datos sabe que está a punto de ejecutar un evento de activación antes de que realmente lo ejecuta, tiene la capacidad de sandwich en el evento disparado por delante de la ejecución del evento de activación, si un tiempo de acción de gatillo ANTES DE se ha especificado.

Tres eventos desencadenantes posibles pueden causar un gatillo para disparar: la ejecución de una INSERT declaración, una BORRAR declaración, o un ACTUALIZACIÓN comunicado. Estos tres estados tienen el poder de cambiar el contenido de una tabla de base de datos.

Por lo tanto, cualquier inserción de uno o más filas en la tabla sujeto, cualquier deleción de uno o más filas de la tabla sujeto, o cualquier actualización de una o más columnas en una o más filas en la tabla sujeto puede causar un gatillo para disparar. EN nombre_tabla, por supuesto, se refiere a la tabla para la que una INSERT, BORRAR, o ACTUALIZACIÓN se ha especificado.

Declaración de fila y disparadores

los triggered_action en el ejemplo anterior tiene la siguiente sintaxis:

[PARA CADA FILA] CUANDO 

Puede especificar cómo actuará el gatillo:

  • Gatillo Row: El disparador se disparará una vez al encontrarse con la INSERT, BORRAR, o ACTUALIZACIÓN declaración que constituye el evento desencadenante.

  • Declaración de disparo: El gatillo se dispara varias veces, una vez para cada fila de la tabla sujeto que se ve afectada por el hecho desencadenante.

Como se indica por los corchetes, la PARA CADA cláusula es opcional. A pesar de esto, el gatillo debe actuar de un modo u otro. Si no PARA CADA se especifica la cláusula, el comportamiento predeterminado es POR CADA ESTADO.

Cuando un desencadenador se activa

La condición de búsqueda en el CUANDO cláusula permite especificar las circunstancias en que un disparador se dispara. Especifique un predicado, y si el predicado es verdadero, el trigger de fuego si es falsa, no lo hará. Esta capacidad aumenta en gran medida la utilidad de los factores desencadenantes.

Puede especificar que sólo después de que se ha superado un cierto valor umbral a incendios de disparo, o cuando cualquier otra condición puede ser determinado a ser Verdadero o Falso.

La sentencia SQL desencadenado

La sentencia SQL desencadenado puede ser una sola sentencia SQL o una secuencia de sentencias SQL ejecutadas una tras otra. En el caso de una sola sentencia de SQL, la sentencia SQL desencadenado no es más que una sentencia SQL ordinaria.

Para una secuencia de instrucciones SQL, sin embargo, debe garantizar la atomicidad para asegurar que la operación no se aborta medio de la corriente, dejando la base de datos en un estado no deseado. Usted puede hacer esto con un COMIENZO-END bloque que incluye la ATÓMICA palabra clave:

COMENZAR ATÓMICA {sentencia SQL 1} {sentencia SQL 2} ... {sentencia SQL n }FIN

Una definición ejemplo gatillo

Supongamos que el gerente de recursos humanos corporativa quiere ser informado cada vez que uno de los gerentes regionales contrata a un nuevo empleado. El siguiente disparador puede manejar esta situación muy bien:

CREATE TRIGGER newhireBEFORE INSERTAR EN CADA employeeFOR sendmail STATEMENTBEGIN ATOMICCALL ('HRDirector') INSERT INTO logtableVALUES ('newhire', CURRENT_USER, CURRENT_TIMESTAMP) -FIN-

Cada vez que se inserta una nueva fila en la tabla newhire, un e-mail se disparó con el gerente de recursos humanos con los detalles, y el nombre de inicio de sesión de la persona que realiza la inserción y el momento de la inserción se registran en una tabla de registro, proporcionando una pista de auditoría.




» » » » Cómo crear un disparador sql