ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Disparadores O Triggers (Mysql)


Enviado por   •  28 de Enero de 2014  •  1.316 Palabras (6 Páginas)  •  535 Visitas

Página 1 de 6

Disparadores (Trigger)

El soporte para disparadores se incluyó a partir de MySQL 5.0.2. Actualmente,

el soporte para disparadores es básico, por lo tanto hay ciertas limitaciones en

lo que puede hacerse con ellos. Esta sección trata sobre el uso de los

disparadores y las limitaciones vigentes.

Un disparador es un objeto de base de datos con nombre que se asocia a una

tabla, y se activa cuando ocurre un evento en particular para la tabla. Algunos

usos para los disparadores es verificar valores a ser insertados o llevar a cabo

cálculos sobre valores involucrados en una actualización.

Un disparador se asocia con una tabla y se define para que se active al ocurrir

una sentencia INSERT, DELETE, o UPDATE sobre dicha tabla. Puede también

establecerse que se active antes o después de la sentencia en cuestión. Por

ejemplo, se puede tener un disparador que se active antes de que un registro

sea borrado, o después de que sea actualizado.

Para crear o eliminar un disparador, se emplean las sentencias CREATE

TRIGGER y DROP TRIGGER.

Este es un ejemplo sencillo que asocia un disparador con una tabla para

cuando reciba sentencias INSERT. Actúa como un acumulador que suma los

valores insertados en una de las columnas de la tabla.

La siguiente sentencia crea la tabla y un disparador asociado a ella:

mysql> CREATE TABLE account (acct_num INT, amount

DECIMAL(10,2));

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account

-> FOR EACH ROW SET @sum = @sum + NEW.amount;

La sentencia CREATE TRIGGER crea un disparador llamado ins_sum que se

asocia con la tabla account. También se incluyen cláusulas que especifican el

momento de activación, el evento activador, y qué hacer luego de la activación:

 La palabra clave BEFORE indica el momento de acción del disparador. En

este caso, el disparador debería activarse antes de que cada registro se

inserte en la tabla. La otra palabra clave posible aquí es AFTER.

 La palabra clave INSERT indica el evento que activará al disparador. En

el ejemplo, la sentencia INSERT causará la activación. También pueden

crearse disparadores para sentencias DELETE y UPDATE.

 La sentencia siguiente, FOR EACH ROW, define lo que se ejecutará cada

vez que el disparador se active, lo cual ocurre una vez por cada fila

afectada por la sentencia activadora. En el ejemplo, la sentencia

activada es un sencillo SET que acumula los valores insertados en la

columna amount. La sentencia se refiere a la columna como

NEW.amount, lo que significa “el valor de la columna amount que será

insertado en el nuevo registro.”

Para utilizar el disparador, se debe establecer el valor de la variable

acumulador a cero, ejecutar una sentencia INSERT, y ver qué valor presenta

luego la variable.

mysql> SET @sum = 0;

mysql> INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-

100.00);

mysql> SELECT @sum AS 'Total amount inserted';

+-----------------------+

| Total amount inserted |

+-----------------------+

| 1852.48 |

+-----------------------+

En este caso, el valor de @sum luego de haber ejecutado la sentencia INSERT

es 14.98 + 1937.50 - 100, o 1852.48.

Para eliminar el disparador, se emplea una sentencia DROP TRIGGER. El

nombre del disparador debe incluir el nombre de la tabla:

mysql> DROP TRIGGER account.ins_sum;

Debido a que un disparador está asociado con una tabla en particular, no se

pueden tener múltiples disparadores con el mismo nombre dentro de una tabla.

También se debería tener en cuenta que el espacio de nombres de los

disparadores puede cambiar en el futuro de un nivel de tabla a un nivel de base

de datos, es decir, los nombres de disparadores ya no sólo deberían ser únicos

para cada tabla sino para toda la base de datos. Para una mejor compatibilidad

con desarrollos futuros, se debe intentar emplear nombres de disparadores que

no se repitan dentro de la base de datos.

Adicionalmente al requisito de nombres únicos de disparador en cada tabla,

hay otras limitaciones en los tipos de disparadores que pueden crearse. En

particular, no se pueden tener dos disparadores para una misma tabla que

sean activados en el mismo momento y por el mismo evento. Por ejemplo, no

se pueden definir dos BEFORE INSERT o dos AFTER UPDATE en una misma

tabla. Es improbable que esta sea una gran limitación, porque es posible definir

un disparador que ejecute múltiples sentencias empleando el constructor de

sentencias compuestas BEGIN ... END luego de FOR EACH ROW. (Más

adelante en esta sección puede verse un ejemplo).

También hay limitaciones

...

Descargar como (para miembros actualizados) txt (9 Kb)
Leer 5 páginas más »
Disponible sólo en Clubensayos.com