Triggerbd - WordPress.com
Transcripción
Triggerbd - WordPress.com
Trigger Características Es un tipo de procedimiento almacenado que se ejecuta cuando se intenta modificar los datos de una tabla (o vista). Se definen para una tabla (o vista) específica. se crean para conservar la integridad referencial y la coherencia entre los datos entre distintas tablas. si se intenta modificar (agregar, actualizar o eliminar) datos de una tabla en la que se definió un disparador para alguna de estas acciones (inserción, actualización y eliminación), el disparador se ejecuta (se dispara) en forma automática. un trigger se asocia a un evento (inserción, actualización o borrado) sobre una tabla. la diferencia con los procedimientos almacenados del sistema es que los triggers: - no pueden ser invocados directamente; al intentar modificar los datos de una tabla para la que se ha definido un disparador, el disparador se ejecuta automáticamente. - no reciben y retornan parámetros. - son apropiados para mantener la integridad de los datos, no para obtener resultados de consultas. los disparadores, a diferencia de las restricciones "check", pueden hacer referencia a campos de otras tablas. por ejemplo, puede crearse un trigger de inserción en la tabla "ventas" que compruebe el campo "stock" de un artículo en la tabla "articulos"; el disparador controlaría que, cuando el valor de "stock" sea menor a la cantidad que se intenta vender, la inserción del nuevo registro en "ventas" no se realice. los disparadores se ejecutan despues de la ejecución de una instrucción "insert", "update" o "delete" en la tabla en la que fueron definidos. las restricciones se comprueban antes de la ejecución de una instrucción "insert", "update" o "delete". por lo tanto, las restricciones se comprueban primero, si se infringe alguna restricción, el desencadenador no llega a ejecutarse. los triggers se crean con la instrucción "create trigger". esta instrucción especifica la tabla en la que se define el disparador, los eventos para los que se ejecuta y las instrucciones que contiene. sintaxis básica: create triggre nombredisparador on nombretabla for evento- insert, update o delete as Sentencias los triggers o disparadores son objetos de la base de datos que ejecutan accionescuando se producen ciertos eventos (tanto dml como ddl) (inserciones, modificaciones, borrados, creación de tablas, etc). Ventajas Seguridad de los datos mejorada: •Ofrecen chequeos de seguridad basada en valores.Integridad de los datos mejorada: •Fuerzan restricciones dinámicas de integridad de datos y de integridad referencial. •Aseguran que las operaciones relacionadas se realizan juntas de forma implícita. •Respuesta instantánea ante un evento auditado •Ofrece un mayor control sobre la B.D. Desventajas Hay que definir con anticipación la tarea que realizara el trigger •Peligro de pérdida en Reorganizaciones •Hay que programarlos para cada DBMS •Un Trigger nunca se llama directamente. •Los triggers no se desarrollan pensando en un solo registro, los mismos deben funcionar en conjunto con los datos ya que se disparan por operación y no por registro. •Por funcionalidad, no hay que poner en uno solo las funciones de INSERT,UPDATE y DELETE. •Utilizar moderadamente los triggers. •No se pueden utilizar en tablas temporales Ejemplos CREATE TRIGGER nivel_columna AFTER DELETE OF salario ON empleado BEGIN CREATE TRIGGER nivel_fila_con_condición AFTER DELETE OF salario ON empleado FOR EACH ROW WHEN OLD.salario >60000 BEGIN CREATE TABLE test1(a1 INT); CREATE TABLE test2(a2 INT); CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY); CREATE TABLE test4( a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b4 INT DEFAULT 0 ); DELIMITER | CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END | DELIMITER ; INSERT INTO test3 (a3) VALUES (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL); INSERT INTO test4 (a4) VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0), (0); Si en la tabla test1 se insertan los siguientes valores: mysql> INSERT INTO test1 VALUES -> (1), (3), (1), (7), (1), (8), (4), (4); Query OK, 8 rows affected (0.01 sec) Records: 8 Duplicates: 0 Warnings: 0 Entonces los datos en las 4 tablas quedarán así: mysql> SELECT * FROM test1; +------+ | a1 | +------+ | 1| | 3| | 1| | 7| | 1| | 8| | 4| | 4| +------+ 8 rows in set (0.00 sec) mysql> SELECT * FROM test2; +------+ | a2 | +------+ | 1| | 3| | 1| | 7| | 1| | 8| | 4| | 4| +------+ 8 rows in set (0.00 sec) mysql> SELECT * FROM test3; +----+ | a3 | +----+ | 2| | 5| | 6| | 9| | 10 | +----+ 5 rows in set (0.00 sec) mysql> SELECT * FROM test4; +----+------+ | a4 | b4 | +----+------+ | 1| 3| | 2| 0| | 3| 1| | 4| 2| | 5| 0| | 6| 0| | 7| 1| | 8| 1| | 9| 0| | 10 | 0| +----+------+ 10 rows in set (0.00 sec)