0% encontró este documento útil (0 votos)
5 vistas4 páginas

Sintaxis y Ejemplos de CREATE TRIGGER

Trigger

Cargado por

cami900
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
5 vistas4 páginas

Sintaxis y Ejemplos de CREATE TRIGGER

Trigger

Cargado por

cami900
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Sintaxis de CREATE TRIGGER

CREATE TRIGGER nombre_disp momento_disp evento_disp


ON nombre_tabla FOR EACH ROW sentencia_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 accin. Puede
ser BEFORE (antes) oAFTER (despues), para indicar que el disparador se

ejecute antes o despus que la sentencia que lo activa.


evento_disp indica la clase de sentencia que activa al disparador. Puede
ser INSERT, UPDATE, oDELETE. Por ejemplo, un disparador BEFORE para
sentencias INSERT podra 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
disparadores BEFORE UPDATE y BEFORE INSERT o BEFORE UPDATE y AFTER
UPDATE.
----------------------------------------------

CREATE TABLE employees_audit (


id int(11) NOT NULL AUTO_INCREMENT,
employeeNumber int(11) NOT NULL,
lastname varchar(50) NOT NULL,
changedon datetime DEFAULT NULL,
action varchar(50) DEFAULT NULL,
PRIMARY KEY (id)
)
DELIMITER $$
CREATE TRIGGER before_employee_update
BEFORE UPDATE ON employees
FOR EACH ROW BEGIN
INSERT INTO employees_audit
SET action = 'update',
employeeNumber = [Link],
lastname = [Link],
changedon = NOW();
END$$
DELIMITER ;

create table miTabla( id int , nombre varchar(50) );


Y despus creamos un trigger que va a crear una variable global con el nombre
antiguo antes de ejecutar el update y otra con el nombre nuevo que habr despus
de ejecutar el update.
delimiter //
create trigger miTabla_bu before update
on miTabla
for each row
begin
set @nombreViejo = [Link];
set @nombreNuevo = [Link];
end//
Vamos a ver otro tigger :
create trigger miTabla_bi
before insert on miTabla
for each row
begin
set @x = 'Trigger activado';
set [Link] = Valor introducido desde el trigger;
end//
En esta ocasin, cada vez que se haga un insert sobre la tabla miTabla, se crear
una variable global con el valor Trigger activado y modificar el valor que se
insertar en la columna nombre, por lo que siempre se insertar el valor Valor
introducido desde el trigger.
Si lo que queremos es mantener el control de una tabla para ver quien la modifica y
a que hora, podemos crear una tabla donde iremos anotando quien hace cada
modificacin y anotar los cambios.
Creamos la tabla auxiliar
CREATE TABLE controlMiTabla
(

id int not null auto_increment,


id_registro int,
anterior_nombre varchar(50),
nuevo_nombre varchar(50),
usuario varchar(40),
modificado datetime,
primary key(id)
) ENGINE = InnoDB;
Y ahora vamos a crear un trigger que se encargue de llevar un log de quien
actualiza la tabla, que valores modifica y a que hora:
delimiter //
create trigger MiTabla_BU after update on miTabla
for each row
begin
insert into controlMiTabla (id_registro,
anterior_nombre , nuevo_nombre, usuario

, modificado )

values([Link] , [Link] , [Link], CURRENT_USER(), NOW()


);
end//
Y ya tenemos nuestro trigger creado, con el cual llevaremos el control de la tabla.
Esto es recomendable hacerlo solo en las tablas de importancia critica, ya que si no
nuestra base de datos crecer de forma innecesaria.
------------------------------------------

Sintaxis de DROP TRIGGER


DROP TRIGGER [nombre_esquema.]nombre_disp

Elimina un disparador. El nombre de esquema es opcional. Si el esquema


se omite, el disparador se elimina en el esquema actual.
Anteriormente a la versin 5.0.10 de MySQL, se requera el nombre de
tabla en lugar del nombre de esquema. (nom_tabla.nom_disp).

Nota: cuando se actualice desde una versin anterior de MySQL 5 a

MySQL 5.0.10 o superior, se deben eliminar todos los disparadores antes


de actualizar y volver a crearlos despus, o DROP TRIGGER no funcionar
luego de la actualizacin.
--------------------

Empleando el constructor BEGIN ... END, se puede definir un disparador


que ejecute sentencias mltiples. Dentro del bloque BEGIN, tambin
pueden utilizarse otras sintaxis permitidas en rutinas almacenadas, tales
como condicionales y bucles. Como sucede con las rutinas almacenadas,
cuando se crea un disparador que ejecuta sentencias mltiples, se hace
necesario redefinir el delimitador de sentencias si se ingresar el
disparador a travs del programa mysql, de forma que se pueda utilizar el
caracter ';' dentro de la definicin del disparador. El siguiente ejemplo
ilustra estos aspectos. En l se crea un disparador para UPDATE, que
verifica los valores utilizados para actualizar cada columna, y modifica el
valor para que se encuentre en un rango de 0 a 100. Esto debe hacerse en
un disparadorBEFORE porque los valores deben verificarse antes de
emplearse para actualizar el registro:
mysql>
mysql>
->
->
->
->
->
->
->
->
mysql>
------------

delimiter //
CREATE TRIGGER upd_check BEFORE UPDATE ON account
FOR EACH ROW
BEGIN
IF [Link] < 0 THEN
SET [Link] = 0;
ELSEIF [Link] > 100 THEN
SET [Link] = 100;
END IF;
END;//
delimiter ;

También podría gustarte