Triggers en Mysql

Un trigger o disparador es un evento que se ejecuta al realizar una acción sobre una determinada tabla. Resulta muy práctico por ejemplo si queremos que al insertar un dato en una tabla se copien ciertos datos automáticamente en otra. En MySql, ésta función viene incluida a partir de la versión 5.0.

Para crear un trigger, antes deberemos tener las tablas creadas. Una vez hecho ésto, nos dirigimos a la tabla sobre la que se controlará si se realiza una determinada acción. Aplicado a un caso práctico para que se entienda mejor, tenemos una liga, donde se juegan partidos, éstos partidos determinarán la clasificación, por lo que cuando se inserte un partido se ejecutará el disparador que actualizará los datos de los equipos: partidos ganados, partidos perdidos, goles a favor, etc.

Bien, nos encontramos dentro de la tabla, donde nos aparece su estructura. Justo arriba aparece la pestaña SQL, hacemos click. Se nos carga otra página donde tenemos que escribir el código del trigger. Es importante poner como delimitador ” | “, sin las comillas dobles, ya que de lo contrario, es bastante probable que nos de error. Pasemos a un ejemplo, que es como se ve de forma más clara:




————————————————————————-

CREATE TRIGGER actualizarequipos BEFORE INSERT ON partidos

FOR EACH

ROW

begin

IF NEW.golesl > NEW.golesv THEN

UPDATE equipos SET pg = pg+1 WHERE idequipo = NEW.idel;

UPDATE equipos SET puntos= puntos+3 WHERE idequipo= NEW.idel;

UPDATE equipos SET gf = gf+NEW.golesl WHERE idequipo = NEW.idel;

UPDATE equipos SET gc = gc+NEW.golesv WHERE idequipo = NEW.idel;

UPDATE equipos SET pp = pp+1 WHERE idequipo = NEW.idev;

UPDATE equipos SET gf = gf+NEW.golesv WHERE idequipo = NEW.idev;

UPDATE equipos SET gc = gc+NEW.golesl WHERE idequipo = NEW.idev;

end if;

IF NEW.golesl < NEW.golesv THEN

UPDATE equipos SET puntos= puntos+3 WHERE idequipo= NEW.idev;

UPDATE equipos SET pg = pg+1 WHERE idequipo = NEW.idev;

UPDATE equipos SET gf = gf+NEW.golesv WHERE idequipo = NEW.idev;

UPDATE equipos SET gc = gc+NEW.golesl WHERE idequipo = NEW.idev;

UPDATE equipos SET pp = pp+1 WHERE idequipo = NEW.idel;

UPDATE equipos SET gf = gf+NEW.golesl WHERE idequipo = NEW.idel;

UPDATE equipos SET gc = gc+NEW.golesv WHERE idequipo = NEW.idel;

end if;

IF NEW.golesl = NEW.golesv THEN

UPDATE equipos SET pe = pe+1 WHERE idequipo = NEW.idev;

UPDATE equipos SET puntos = puntos+1 WHERE idequipo = NEW.idev;

UPDATE equipos SET puntos = puntos+1 WHERE idequipo = NEW.idel;

UPDATE equipos SET gf = gf+NEW.golesv WHERE idequipo = NEW.idev;

UPDATE equipos SET gc = gc+NEW.golesl WHERE idequipo = NEW.idev;

UPDATE equipos SET pe = pe+1 WHERE idequipo = NEW.idel;

UPDATE equipos SET gf = gf+NEW.golesl WHERE idequipo = NEW.idel;

UPDATE equipos SET gc = gc+NEW.golesv WHERE idequipo = NEW.idel;

end if;

end

————————————————————————-

Funcionamiento:

1. Crea el trigger con nombre ‘actualizarequipos’.

2. Con BEFORE INSERT ON partidos, se comprueban los datos antes de introducirlos.

3. Con FOR EACH ROW se va recorriendo cada tupla(fila) de los equipos, para comprobar que coincida su id con el de los equipos que disputan el partido.

4. Con IF se comprueba si el resultado es victoria, empate o derrota de cada equipo, y NEW. hace referencia al nuevo dato introducido, es decir, los goles que se han introducido en el partido.

5. UPDATE actualiza todos los datos del equipo según el resultado y los goles.

6. Finalmente, tras introducir los datos se actualizan los datos de esos equipos, y con la siguiente consulta podriamos saber la clasificación:


SELECT * FROM equipos ORDER BY puntos DESC,gf DESC



Selecciona todos los datos de la tabla equipos y los ordena primero por puntos, y en caso de tener los mismos, por los goles a favor.

mysql


Compártelo:
  • BarraPunto
  • email
  • Facebook
  • Meneame
  • MySpace
  • Twitter
  • del.icio.us
  • Digg
  • Reddit
  • Slashdot
0 votos Vota!!

No hay comentarios, sea el primero.

Deje un comentario