Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



jueves, 12 de septiembre de 2013

Mi primer triggers en Sqlite: un ejemplo

 Mi primer triggers en Sqlite: 
un ejemplo de borrado en cascada
¿que es un trigger o disparador? 
Un trigger (o disparador) en una Base de datos, es un procedimiento que se ejecuta cuando se cumple una condición establecida al realizar una operación. Dependiendo de la base de datos, los triggers pueden ser de inserción (INSERT), actualización (UPDATE) o borrado (DELETE). Algunas bases de datos pueden ejecutar triggers al crear, borrar o editar usuarios, tablas, bases de datos u otros objetos. (fuente: http://es.wikipedia.org/wiki/Trigger_(base_de_datos))
Bueno, una vez explicado que es, os voy a hacer un ejemplo de "borrado en cascada", osea que cuando se haya borrado un registro de una tabla, se borre también los registros que estén relacionados de otra tabla.

El ejemplo:
Se trata de dos tablas "alumno" y "asignatura", las cuales contienen los datos de los alumnos (nombre) y las asignaturas y notas que tienen esos alumnos.

El caso es que queremos que cuando se borre un alumno, de la tabla "alumno", automáticamente, se borren las asignaturas y las notas que tenia dicho alumno en la tabla "asignatura" . La relación entre las tablas es que un alumno puede tener una o varias asignaturas. A continuación el esquema.

Esquema:


Solución con triggers o disparador:
CREATE TRIGGER borradoAlumnosBEFORE DELETE ON alumno
FOR EACH ROW BEGIN
    DELETE FROM asignatura WHERE asignatura.idalumno = OLD.idalumno;
END;

¿que hace?
1) Se crea un trigger llamado "borradoAlumnos"
2) Despues de borrar un alumno, se ejecuta por cada registro (fila = row) de la tabla "asignatura", la instrucción:
    DELETE FROM asignatura WHERE asignatura.idalumno = OLD.idalumno;
Osea que cada registro de la tabla "asignatura" que tenga el mismo idalumno del alumno borrado (OLD.idalumno), también se va a borrar.

3) Este trigger se ejecuta automáticamente (como si se disparara, por eso del nombre "triggers"), siempre que se produzca el evento de borrado de un alumno.

Para ver más ejemplos y como se pueden crear , visita esta página:
Generador automático de Triggers
http://www.rcs-comp.com/site/index.php/view/Utilities-SQLite_foreign_key_trigger_generator

Saludos