Sintaxis de CREATE TRIGGER
CREATE TRIGGERnombre_disp
momento_disp
evento_disp
ONnombre_tabla
FOR EACH ROWsentencia_disp
Un disparador es un objeto con nombre en una base de datos que se asocia con una tabla, y se activa cuando ocurre un evento en particular para esa tabla.
El disparador queda asociado a la tabla
nombre_tabla
. Esta debe ser una tabla permanente, no puede ser una tabla TEMPORARY
ni una vista.momento_disp
es el momento en que el disparador entra en acción. Puede ser BEFORE
(antes) o AFTER
(despues), para indicar que el disparador se ejecute antes o después que la sentencia que lo activa.evento_disp
indica la clase de sentencia que activa al disparador. Puede ser INSERT
, UPDATE
, o DELETE
. Por ejemplo, un disparador BEFORE
para sentencias INSERT
podría utilizarse para validar los valores a insertar.No puede haber dos disparadores en una misma tabla que correspondan al mismo momento y sentencia. Por ejemplo, no se pueden tener dos disparadores
BEFORE UPDATE
. Pero sí es posible tener los disparadoresBEFORE UPDATE
y BEFORE INSERT
o BEFORE UPDATE
y AFTER UPDATE
.sentencia_disp
es la sentencia que se ejecuta cuando se activa el disparador. Si se desean ejecutar múltiples sentencias, deben colocarse entre BEGIN ... END
, el constructor de sentencias compuestas. Esto además posibilita emplear las mismas sentencias permitidas en rutinas almacenadas.Las columnas de la tabla asociada con el disparador pueden referenciarse empleando los alias
OLD
y NEW
.OLD.nombre_col
hace referencia a una columna de una fila existente, antes de ser actualizada o borrada.NEW.nombre_col
hace referencia a una columna en una nueva fila a punto de ser insertada, o en una fila existente luego de que fue actualizada.El uso de
SET NEW.nombre_col
= valor
necesita que se tenga el privilegio UPDATE
sobre la columna. El uso de SET nombre_var
= NEW.nombre_col
necesita el privilegio SELECT
sobre la columna.Nota: Actualmente, los disparadores no son activados por acciones llevadas a cabo en cascada por las restricciones de claves extranjeras. Esta limitación se subsanará tan pronto como sea posible.
La sentencia
CREATE TRIGGER
necesita el privilegio SUPER
. Esto se agregó en MySQL 5.0.2.
Comentarios
Publicar un comentario