Triggers o disparadores en MySQL

12,429 views

Published on

Guia sencilla que nos permite crear triggers o Disparadores en MySQL de manera facil.

Published in: Technology
2 Comments
5 Likes
Statistics
Notes
  • Gracias por tu aporte, muy claro y directo al grano.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Sencillo, claro y práctico: Muy bueno !
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
12,429
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
675
Comments
2
Likes
5
Embeds 0
No embeds

No notes for slide

Triggers o disparadores en MySQL

  1. 1. Guía Sencilla Jair Ospino Ardila -- jairospino@ingenieros.com
  2. 2. Son procedimientos que se ejecutan cumple una condición establecida. automáticamente cuando se Los triggers pueden ser de:  Inserción (INSERT)  Actualización (UPDATE)  Eliminación (DELETE). NOTA: Para poder crear el Disparador hay que tener presente:  Deben existir las Tablas Asociadas a el Disparador  El Disparador no debe tener un nombre asociado a una palabra reservada del sistema.  Se debe previamente modificar el comodín de ejecución de comandos que esta por defecto (;). para ello utilizamos DELIMITER @ OJO --> no es obligatorio - @ - puede ser cualquier comodín  No se permite dentro de la Sentencia del trigger ejecutar un comando Select.  No se admiten más de un trigger que relacionen a una misma tabla con la misma acción. Hasta ahora versión del Ejemplo 5.5.24 año 2013 DELIMITER @ CREATE trigger nombre_trigger [before, after] [insert, update, delete] ON tabla For Each Row Begin Sentencia a Ejecutar [insert, update, delete] End; @ DELIMITER ;
  3. 3. CREATE database IF NOT EXISTS bdTrigger; USE bdTrigger; CREATE TABLE IF NOT EXISTS tb_cliente ( id_orden INT NOT NULL auto_increment, documento VARCHAR(12), nombre VARCHAR(25) NOT NULL, apellido VARCHAR(35)NOT NULL, telefono VARCHAR(15), email VARCHAR(50), PRIMARY KEY(id_orden,documento) )engine=InnoDB; /* En esta tabla guardaremos el respaldo de los datos luego de ejecutar una instrucción en la tabla tb_cliente mediante el Disparador*/ CREATE TABLE IF NOT EXISTS tb_seguridad_cliente ( documento_c VARCHAR(12), nombre_c VARCHAR(25), apellido_c VARCHAR(35), telefono_c VARCHAR(15), email_c VARCHAR(50), fecha_accion_c DATE, accion_c VARCHAR(11) /* Agregado, Modificado, Cancelado-0-(Eliminado)*/ )engine=InnoDB;
  4. 4. NOTA:  El comando new nos permite referenciar al valor que viene por primera vez, seguido por el nombre del campo que deseamos tomar de la tabla a la cual definimos en el disparador al momento de crearlo (tb_cliente)  Si lo que deseamos es INSERTAR (insert) solamente podemos utilizamos el comando new.  Si lo que deseamos es ACTUALIZAR (update) podremos utilizar los dos comandos permitidos new y old.  Si usamos -- old -- hacemos referencia al dato que contenía el registro antes de modificarlo.  si lo que deseamos es ELIMINAR (delete) solamente podemos utilizar el comando old. /* Trigger que se acciona luego de INSERTAR algún registro en la Tabla tb_cliente*/ DELIMITER @ CREATE TRIGGER tr_insert_cliente BEFORE INSERT ON tb_cliente FOR EACH ROW BEGIN INSERT INTO tb_seguridad_cliente VALUES ( new.documento, new.nombre, new.apellido, new.telefono, new.email, curdate(),'Agregado'); END; @ DELIMITER ;
  5. 5. /* Trigger que se acciona luego de ACTUALIZAR algún registro en la Tabla tb_cliente*/ DELIMITER @ CREATE TRIGGER tr_update_cliente BEFORE UPDATE ON tb_cliente FOR EACH ROW BEGIN INSERT INTO tb_seguridad_cliente VALUES (new.documento, new.nombre, new.apellido, new.telefono, new.email, curdate(), 'Modificado'); END; @ DELIMITER ; /* Trigger que se acciona luego de ELIMINAR algún registro en la Tabla tb_cliente*/ DELIMITER @ CREATE TRIGGER tr_delete_cliente BEFORE DELETE ON tb_cliente FOR EACH ROW BEGIN INSERT INTO tb_seguridad_cliente VALUES(old.documento, old.nombre, old.apellido, old.telefono, old.email, curdate(),'Eliminado'); END; @ DELIMITER ;
  6. 6. /* Insertamos clientes para verificar que el Disparador -- tr_insert_cliente -- Funcione correctamente */ INSERT INTO tb_cliente(documento,nombre,apellido,telefono,email) VALUES ('1065 -1','jair cliente 1','apellido cliente 1','tel c1','email@cliente1'), ('1065 -2','marcela cliente 2','apellido cliente 2','tel c2','email@cliente2'), ('1065 -3','damaris cliente 3','apellido cliente 3','tel c3','email@cliente3'), ('1065 -4','emeterio cliente 4','apellido cliente 4','tel c4','email@cliente4'), ('1065 -5','diana cliente 5','apellido cliente 5','tel c5','email@cliente5'), ('1065 -6','ruber cliente 6','apellido cliente 6','tel c6','email@cliente6'), ('1065 -7','yuleidi cliente 7','apellido cliente 7','tel c7','email@cliente7'), ('1065 -8','vianeth cliente 8','apellido cliente 8','tel c8','email@cliente8'), ('1065 -9','lucia cliente 9','apellido cliente 9','tel c9','email@cliente9'), ('1065 -10','ismael cliente 10','apellido cliente 10','tel c10','email@cliente10'), ('1065 -11','justa cliente 11','apellido cliente 11','tel c11','email@cliente11'), ('1065 -12','sergio cliente 12','apellido cliente 12','tel c12','email@cliente12' );
  7. 7. /* Modificamos clientes para verificar que el Dispardor -- tr_update_cliente -- Funcione correctamente */ UPDATE tb_cliente SET documento='i065 -mod', nombre='nombre j22 mod', apellido='apellido mod', telefono='tel mod' WHERE id_orden = 7; /* Eliminamos clientes para verificar que el Dispardor -- tr_delete_cliente -- Funcione correctamente */ DELETE FROM tb_cliente WHERE id_orden = 9;
  8. 8. /* Ahora si consultamos la tabla de tb_seguridad_cliente podremos observar que automáticamente se han guardado los datos, sin necesidad de hacerlo mediante código otra vez */ SELECT DISTINCT(documento_c), nombre_c, apellido_c, accion_c FROM tb_seguridad_cliente; /* Para MOSTRAR los Disparadores - triggers empleamos el comando: Show triggers; */ Show triggers;
  9. 9. /* Para BORRAR los Disparadores - triggers empleamos el comando: Drop trigger nombre_trigger; */ DROP TRIGGER tr_cliente;

×