No es un bug, es una característica no documentada

martes, 7 de abril de 2015

Bases de datos. SQL programado (XI). Triggers

12:06 Posted by Inazio , No comments
Los Triggers son programas que se ejecutan automáticamente en respuesta a algún suceso ocurrido en la base de datos. En MySQL se corresponden con instrucciones DML (INSERT, UPDATE, DELETE).

Suponen un mecanismo para asegurar la integridad de los datos, o como método para auditar bases de datos.
No hay que abusar de su utilización pues ello puede traer consigo una sobrecarga del sistema.

La sintaxis de los Trigger es


Veamos unos ejemplos para entenderlo.


En  este caso, el trigger uno nos indicará que para cada fila, antes de realizar una inserción en la tabla alumnos, realizará la sentencia que pone en la línea 7, es decir, insertarlo también en la tabla alumnos_replica.

Es decir, en el supuesto de que un usuario ejecute la siguiente sentencia

insert into alumnos values(6, ‘alumno6’);

Se habrá ejecutado las siguientes dos sentencias

insert into alumnos_replica values(6, ‘alumno6’);
insert into alumnos values(6, ‘alumno6’);

Habiéndose ejecutado la primera instrucción automáticamente.

Ciertamente, lo correcto hubiera sido realizarlo con un after, es decir, insertar la fila en la tabla alumnos y DESPUÉS crear la entrada en alumnos_replica, aunque el orden, dentro de lo que cabe, no importa mucho, ya que o se ejecutan las dos sentencias o no se ejecutará ninguna.

Para realizar ese cambio, no se puede hacer como tal, habrá que borrar el trigger con

drop trigger nombreDeTrigger;

Y deberemos volver a crearlo y compilarlo.

El siguiente ejemplo es de un borrado


Aquí, cada vez que estemos borrando una fila en la tabla alumnos, haremos lo mismo en la tabla alumnos_replica.

Para ello, llamaremos a los valores viejos de los campos determinados, con old.campo.

Así mismo, al hacer un insert tiene sentido preguntar por los nuevos datos introducidos, con new.campo, pero en un Update sí tiene sentido preguntar tanto por los campos viejos como por los nuevos.

Es decir, algo tal que así



0 comentarios:

Publicar un comentario