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)

Documentos relacionados