SlideShare una empresa de Scribd logo
1 de 37
TRIGGER -ACTIVADORES
ALUMNOS:
Romario Montalvan Castillo.
Dina Leon Tapia.
BASES DE DATOS
Trigger
Un trigger es un procedimiento almacenado asociado con una tabla, el cual
se ejecuta automáticamente cuando se modifica un dato de esa tabla
¿Se puede
llamar
explícita-
mente?
¿Se puede
ejecutar
automática-
mente?
¿Puede usar
parámetros?
Procedimiento
definido por el
usuario
Sí No Sí
Trigger No Sí No
Trigger - Aplicaciones Típicas
• Hacer modificarciones en cascada sobre tablas relacionadas
• Deshacer cambios que violan la integridad de los datos
• Forzar restricciones que son muy complejas para reglas y restricciones
• Mantener datos duplicados
• Mantener columnas con datos derivados
• Hacer ajustes de registros
Trigger - Definición
• Un trigger se define asociado con una tabla para una o más sentencias de
manipulación de datos
– Un trigger se puede definir para insert, update, o delete o cualquier combinación de
ellos
Trigger - Activación
• Cuando se modifica un dato en una tabla que tiene declarado un trigger para esa
sentencia, el trigger se “dispara”
– El trigger se dispara una vez, independientemente del número de filas afectadas
– El trigger se dispara aunque no hayan filas afectadas
Triggers and transacciones
• Un trigger es parte de la transacción que causa el disparo
• El trigger puede deshacer:
– Así mismo solamente
– Así mismo y la sentencia que causa el disparo
– La transacción total
Trigger - Reglas
• Los triggers pueden:
– Declarar variables locales
– Invocar procedimientos almacenados
• Los triggers no pueden:
– Llamarse directamente
– Usar parámetros
– Definirse sobre tablas temporales o vistas
– Crear objetos permanentes de base de datos
• Las operaciones con registro mínimo (como select into) no disparan los
triggers
Trigger - Crear
• Sintaxis simplificada:
create trigger trigger_name
on table_name
for {insert | update | delete} [, {insert | update | delete} ...]
as
sql_statements
• Ejemplo:
create trigger trg_i_sales
on sales
for insert
as
if datename (dd,getdate()) = "Sun"
begin
raiserror 40070, "Sales cannot be
processed on Sunday."
rollback trigger
end
Borrar Triggers
• Sintaxis simplificada:
drop trigger trigger_name
• Ejemplo:
drop trigger trg_i_sales
Procedimientos del sistema para Triggers
• sp_depends {table_name | trigger_name}
– Cuando se da el nombre de tabla, lista todos los objetos (incluyendo triggers) de la
misma base de dtos
– Cuando se da el nombre de trigger, lista todas las tablas referencias
• sp_help trigger_name
– Muestra información del trigger
• sp_helptext trigger_name
– Muestra el código usado para crear el trigger
• sp_rename old_trigger_name, new_trigger_name
– Cambia el nombre del trigger
Trigger - ejemplo
• Crear dos tablas:
select * into myauthors
from pubs2..authors
create table myrecord (
mytime datetime,
myrows int
)
• Crear un trigger que guarde la fecha y número de filas afectadas por cada delete:
create trigger trg_d_myauthors
on myauthors
for delete
as
insert into myrecord
values (getdate(), @@rowcount)
return
Triggers - ejemplo
• Ejecutar un delete y ver la tabla myrecords:
delete from myauthors
where state = "CA"
select * from myrecord
• Ejecutar un delete que no afecta filas y ver la tabla myrecords :
delete from myauthors
where 1 = 2
select * from myrecord
• Borrar los objetos de base de datos creados:
drop table myauthors, myrecord
Trigger - Tablas inserted y deleted
• inserted y deleted son dos tablas que se crean automáticamente cada vez que se
dispara un trigger
– inserted almacena cualquier fila que se vaya a añadir a la tabla
– deleted almacena cualquier fila que se vaya a borrar de la tabla
Trigger - Borrados
• A delete adds rows to the deleted table
Trigger - Uso de la tabla deleted
create trigger trg_d_publishers
on publishers
for delete
as
-- Exit trigger if no rows were modified.
if @@rowcount = 0
return
-- For deleted publishers, delete
-- corresponding titles
delete titles
from titles t, deleted d
where t.pub_id = d.pub_id
-- Appropriate actions would take place here
-- since a deleted publisher has far-reaching
-- effects throughout the database.
return
Trigger - Inserciones
• insert añade filas en la tabla inserted
Trigger - Uso de la tabla inserted
-- Make sure all au_ids match
if (select count(*) from authors a, inserted i
where a.au_id=i.au_id ) <> @num_rows
begin
raiserror 31114 "Attempt to insert
invalid au_id into titleauthor."
rollback transaction
return
end
return
Go
-- Insert and update trigger on titleauthor
create trigger trg_iu_titleauthor
on titleauthor
for insert, update as
-- Find out how many rows were modified
declare @num_rows int
select @num_rows=@@rowcount
if @num_rows=0
return
-- Make sure all title_ids match
if (select count(*) from titles t, inserted i
where t.title_id=i.title_id) <> @num_rows
begin
raiserror 31113 "Attempt to insert
invalid title_id into titleauthor."
rollback transaction
return
end
Trigger - Actualizaciones
Un update añade filas en ambas tablas
-- Insert, update, and delete trigger on salesdetail
create trigger trig_iud_salesdetail
on salesdetail
for insert, update, delete
as
-- Exit trigger if no rows were modified.
if @@rowcount = 0
return
-- If a new quantity has been inserted or updated for a
-- given title_id, add the value to titles.total_sales. The
-- isnull function is used because titles.total_sales might
-- be NULL.
update titles
set total_sales = isnull(total_sales, 0) +
(select sum(qty)
from inserted
where titles.title_id = inserted.title_id)
where title_id in (select title_id from inserted)
-- If an old quantity has been updated or deleted for a
-- given title_id, subtract the value from
-- titles.total_sales. The isnull function is used because
-- titles.total_sales might be NULL.
update titles
set total_sales = isnull(total_sales, 0) -
(select sum(qty)
from deleted
where titles.title_id = deleted.title_id)
where title_id in (select title_id from deleted)
return
Trigger - Tablas inserted y deleted
Trigger - Reglas para tablas inserted y deleted
• Ambas tablas tienen las mismas columnas que la tabla asociada al trigger
• El trigger puede consultar datos de las dos tablas
– Otros procesos no pueden consultar datos de las dos tablas
• El trigger no puede modificar datos en las dos tablas
• Cada anidamiento de triggers tiene sus propias tablas inserted y deleted
– Si un trigger modifica datos de su tabla asociada, esos cambios no se reflejan en
las tablas inserted and deleted de ese trigger
Trigger - Tablas inserted and deleted
• Crear una tabla:
select * into myauthors from pubs2..authors
• Crear un trigger que use la función suser_name( ) para listar la(s) fila(s) que
se borraron y el nombre del usuario:
create trigger trg_d_myauthors
on myauthors
for delete
as
select suser_name(), "deleted these rows:"
select * from deleted
return
• Ejecutar un delete que afecte más de una fila:
delete from myauthors where state = "CA“
• Ejecutar un delete que no afecte filas:
delete from myauthors where 1 = 2
• Borrar los objetos de base de datos:
drop table myauthors
Triggers y rollbacks
• Tres tipos de rollbacks:
– Deshacer el trigger
– Deshacer el trigger y la sentencia que lo disparó
– Deshacer toda la transacción
Deshacer un trigger
• Para deshacer un trigger, declarar un punto de grabación y luego hacer el rollback
– Un rollback sin punto de grabación deshace toda la transacción
Procedimiento almacenado
Caso A begin tran
...
insert ...
print "in sp"
...
commit tran
print "sp done"
Trigger
save tran s1
....
rollback tran s1
print “tr done”
return
Procedimiento almacenado
Caso B begin tran
...
(este caso insert ...
ocaciona un print "in sp"
error) ...
commit tran
print "sp done"
Trigger
begin tran s2
....
rollback tran s2
print “tr done”
return
• rollback trigger deshace el trigger y la sentencia que lo disparó
• Sintaxis:
rollback trigger [with raiserror error_number [error_statement] ]
• Ejemplo:
create trigger trg_i_publishers
on publishers
for insert
as
if @@rowcount > 1
begin
rollback trigger with raiserror 40031
"You cannot insert more than one
publisher at a time."
return
end
Deshacer un trigger
Procedimiento almacenado
Caso C begin tran
...
insert ...
print "in sp"
...
commit tran
print "sp done"
Trigger
....
....
rollback trigger
print “tr done”
return
Deshacer un trigger
Procedimiento almacenado
Case D begin tran
...
insert ...
print "in sp"
...
commit tran
print "sp done"
Trigger
begin tran
...
rollback tran
print "tr done”
return
Para deshacer toda la transacción donde está inmerso el trigger, ejecutar un rollback
sin un punto de grabación
Procedimiento almacenado
Case E begin tran
...
insert ...
print "in sp"
...
commit tran
print "sp done"
Trigger
....
....
Rollback tran
print “tr done”
return
Deshacer una transacción
-- Book price can be updated if:
-- 1) only one title is updated at a time
-- 2) the update occurs during the work week
-- 3) the price changes by 10% or less
-- 4) only books with sales > 0 are updated
create trigger trg_u_titles on titles for update
as
declare @num_rows int
select @num_rows = @@rowcount
if @num_rows = 0
return
-- 1) only one title at a time
if @num_rows > 1
begin
rollback trigger with raiserror 20011
"Can only update or add one title at a time."
return
end
-- 2) occurs during the work week
if (select datepart(dw, getdate())) in (1, 7)
begin
rollback trigger with raiserror 20012
"Can only update price during work day."
return
end
-- 3) the price changes by 10% or less
if (select new.price/old.price
from inserted new, deleted old)
not between 1.10 and 0.90
begin
rollback trigger with raiserror 20013
"Can only change price by 10 percent."
return
end
-- 4) only books with sales > 0
if (select isnull(total_sales, 0) from inserted) <= 0
begin
rollback trigger with raiserror 20014
"Can only change price of book with sales."
return
end
return
go
Triggers y rollbacks
Trigger - Prácticas recomendadas
• Consideraciones al elaborar triggers:
– @@rowcount
– if update
– triggers anidados
– triggers recursivos
Trigger - if update
• if update es una condición que le permite a un trigger chequear si ha habido un
cambio en una determinada columna
• Sólo se puede usar en triggers
• Usualmente se usa para chequear si el valor de una llave primaria ha cambiado
• Sintaxis simplificada:
if update (column_name) [ {and | or} update (column_name)]...
-- Update trigger on publishers table
create trigger trg_u_publishers
on publishers
for update
as
-- Find out how many rows were modified
declare @num_rows int
select @num_rows=@@rowcount
if @num_rows=0
return
if update ( pub_id ) -- Was primary key updated?
begin
-- Multiple updated rows not allowed
if @num_rows > 1
begin
raiserror 31113 "Updates to primary
keys of multiple rows is not permitted."
rollback transaction
return
end
-- Cascade update to titles table
update titles
set t.pub_id = new.pub_id
from titles t, inserted new, deleted old
where t.pub_id = old.pub_id
end
return
Trigger - if update
Triggers anidados
• Un trigger anidado es un trigger que se dispara en respuesta a una modificación
hecha en un trigger
• Nivel máximo de anidamiento: 16
– Tanto los procedimientos almacenados como los triggers cuentan en la determinación del
nivel máximo
– @@nestlevel retorna el nivel de anidamiento
Triggers recursivos
• Un trigger recursivo es aquel que se dispara cuando modifica su propia tabla
• Por default, un trigger que modifica su propia tabla no causa un disparo recursivo
del trigger
Métodos para integridad de datos
Dos métodos para implementar integridad de datos
Integridad a
nivel de
Dominio
Integridad a
nivel de Entidad
Integridad
Referencial
Restricciones Checks
Primary key,
restricciones
unique
Referencias
Objetos de
base de
datos
Reglas Indices Triggers
Actualización de valores llave
• Solamente en triggers es posible borrar o actualizar una llave primaria
• Sólo en triggers es posible hacer cambios en cascada
Acción deseada Restricciones Triggers
Insertarar valor de llave primaria Permitido Permitido
Insertar valor de llave foránea Permitido Permitido
Actualizar valor de llave primaria No permitido* Permitido
Actualizar valor de llave foránea Permitido Permitido
Borrar valor de llave primaria No permitido* Permitido
Borrar valor de llave foránea Permitido Permitido
* Valores de llaves primarias se pueden actualizar o borrar si no están referencidos en llaves foráneas
Ejemplo para mantener la integridad referencial de la llave foránea cuando se inserta o
actualiza la tabla salesdetail:
Ejemplo
create trigger trg_iu_sales
on salesdetail
for insert, update as
declare @num_rows int
select @num_rows = @@rowcount
if @num_rows = 0
return
if (select count (*)
from titles t, inserted i
where t.title_id = i.title_id)
<> @num_rows
rollback transaction
if (select count (*) from
sales s, inserted i
where s.stor_id = i.stor_id
and s.ord_num = i.ord_num)
<> @num_rows
rollback transaction
return
create table salesdetail
(stor_id char(4) NOT NULL,
ord_num varchar(20) NOT NULL,
title_id typ_ch_tid NOT NULL
references titles(title_id),
qty smallint NOT NULL,
discount float NOT NULL,
constraint ref_salesdet
foreign key (stor_id, ord_num)
references sales (stor_id, ord_num) )
Ejemplo para mantener la integridad referencial de la llave foránea cuando se inserta o
actualiza la tabla salesdetail:
Ejemplo
create trigger trg_du_titles
on titles
for delete, update as
-- prevent delete or update of
-- title_id if there are foreign key
-- values that reference them
..
return
create trigger trg_du_sales
on sales
for delete, update as
-- prevent delete or update of
-- stor_id/ord_num if there are
-- foreign key values that
-- reference them
...
return
Restricciones versus triggers
• Ventajas de las restricciones:
– Las restricciones (y reglas) son más rápidas que los triggers
– Las restricciones no requieren codificación adicional
– Es mejor para chequear datos antes de ingresarlos a la base de datos
• Ventajas de los triggers:
– Muy flexible
• Los triggers pueden hacer cualquier cosa que se pueda codificar
– Mejor para las reglas complejas del negocio que no se pueden expresar como
restricciones referenciales tales como actualizaciones o borrados en cascada

Más contenido relacionado

La actualidad más candente

Unidad 4 graficación
Unidad 4 graficaciónUnidad 4 graficación
Unidad 4 graficaciónAndhy H Palma
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteJosé Antonio Sandoval Acosta
 
Control de flujo por hardware o software,
Control de flujo  por hardware o software,Control de flujo  por hardware o software,
Control de flujo por hardware o software,Victor Mijangos
 
Uml lenguaje unificado de modelado
Uml lenguaje unificado de modeladoUml lenguaje unificado de modelado
Uml lenguaje unificado de modeladoMarvin Zumbado
 
Ejercicios programacion prolog
Ejercicios programacion prologEjercicios programacion prolog
Ejercicios programacion prologrogersgarcia
 
6 Principios de Programación Orientada a Objetos
6 Principios de Programación Orientada a Objetos6 Principios de Programación Orientada a Objetos
6 Principios de Programación Orientada a ObjetosJose Emilio Labra Gayo
 
Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)michell_quitian
 
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasTópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasJosé Antonio Sandoval Acosta
 
Java – ejercicio 2
Java – ejercicio 2Java – ejercicio 2
Java – ejercicio 2ayreonmx
 
Unidad iii paradigmas de la ingeniería de software
Unidad iii  paradigmas de la ingeniería de softwareUnidad iii  paradigmas de la ingeniería de software
Unidad iii paradigmas de la ingeniería de softwareHelen De la Cruz
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Giancarlo Aguilar
 
2.5 planificación del procesador, niveles objetivos y criterios de planificac...
2.5 planificación del procesador, niveles objetivos y criterios de planificac...2.5 planificación del procesador, niveles objetivos y criterios de planificac...
2.5 planificación del procesador, niveles objetivos y criterios de planificac...lupita zume
 
Analizar mediante-ejemplos-de-la-vida-real-el-concepto-de-procesos
Analizar mediante-ejemplos-de-la-vida-real-el-concepto-de-procesosAnalizar mediante-ejemplos-de-la-vida-real-el-concepto-de-procesos
Analizar mediante-ejemplos-de-la-vida-real-el-concepto-de-procesosJose Armando Velazquez Mijangos
 

La actualidad más candente (20)

Unidad 4 graficación
Unidad 4 graficaciónUnidad 4 graficación
Unidad 4 graficación
 
Taller de Base de Datos - Unidad 3 lenguage DML
Taller de Base de Datos - Unidad 3 lenguage DMLTaller de Base de Datos - Unidad 3 lenguage DML
Taller de Base de Datos - Unidad 3 lenguage DML
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
 
Control de flujo por hardware o software,
Control de flujo  por hardware o software,Control de flujo  por hardware o software,
Control de flujo por hardware o software,
 
Las clases P NP y NP completo
Las clases P NP y NP completoLas clases P NP y NP completo
Las clases P NP y NP completo
 
Uml lenguaje unificado de modelado
Uml lenguaje unificado de modeladoUml lenguaje unificado de modelado
Uml lenguaje unificado de modelado
 
Estructuras Repetitivas con PSeInt (Parte 2)
Estructuras Repetitivas con PSeInt (Parte 2)Estructuras Repetitivas con PSeInt (Parte 2)
Estructuras Repetitivas con PSeInt (Parte 2)
 
Método por plegamiento Hash
Método por plegamiento HashMétodo por plegamiento Hash
Método por plegamiento Hash
 
Ejercicios programacion prolog
Ejercicios programacion prologEjercicios programacion prolog
Ejercicios programacion prolog
 
6 Principios de Programación Orientada a Objetos
6 Principios de Programación Orientada a Objetos6 Principios de Programación Orientada a Objetos
6 Principios de Programación Orientada a Objetos
 
Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)
 
Ensamblador y lenguaje c
Ensamblador y lenguaje cEnsamblador y lenguaje c
Ensamblador y lenguaje c
 
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasTópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
 
Taller de Base de Datos - Unidad 7 Conectividad
Taller de Base de Datos - Unidad 7 ConectividadTaller de Base de Datos - Unidad 7 Conectividad
Taller de Base de Datos - Unidad 7 Conectividad
 
Java – ejercicio 2
Java – ejercicio 2Java – ejercicio 2
Java – ejercicio 2
 
Algoritmo De Productos Medios
Algoritmo De Productos MediosAlgoritmo De Productos Medios
Algoritmo De Productos Medios
 
Unidad iii paradigmas de la ingeniería de software
Unidad iii  paradigmas de la ingeniería de softwareUnidad iii  paradigmas de la ingeniería de software
Unidad iii paradigmas de la ingeniería de software
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 
2.5 planificación del procesador, niveles objetivos y criterios de planificac...
2.5 planificación del procesador, niveles objetivos y criterios de planificac...2.5 planificación del procesador, niveles objetivos y criterios de planificac...
2.5 planificación del procesador, niveles objetivos y criterios de planificac...
 
Analizar mediante-ejemplos-de-la-vida-real-el-concepto-de-procesos
Analizar mediante-ejemplos-de-la-vida-real-el-concepto-de-procesosAnalizar mediante-ejemplos-de-la-vida-real-el-concepto-de-procesos
Analizar mediante-ejemplos-de-la-vida-real-el-concepto-de-procesos
 

Similar a Gestión de triggers en bases de datos

Similar a Gestión de triggers en bases de datos (20)

Sql triggers v3
Sql triggers v3Sql triggers v3
Sql triggers v3
 
Semana 12 y 13 subprogramas triggers
Semana 12 y 13 subprogramas triggersSemana 12 y 13 subprogramas triggers
Semana 12 y 13 subprogramas triggers
 
Disparadores - base de datos
Disparadores - base de datosDisparadores - base de datos
Disparadores - base de datos
 
Disparadores
DisparadoresDisparadores
Disparadores
 
Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggers
 
Postgres trigger
Postgres triggerPostgres trigger
Postgres trigger
 
TRIGGERS O DISPARADORES
TRIGGERS O DISPARADORESTRIGGERS O DISPARADORES
TRIGGERS O DISPARADORES
 
Disparadores 1213820550525607-9
Disparadores 1213820550525607-9Disparadores 1213820550525607-9
Disparadores 1213820550525607-9
 
Triggers
TriggersTriggers
Triggers
 
CREACION DE TRIGGERS.pptx
CREACION DE TRIGGERS.pptxCREACION DE TRIGGERS.pptx
CREACION DE TRIGGERS.pptx
 
Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggers
 
Dbd triggers
Dbd triggersDbd triggers
Dbd triggers
 
18 triggers
18 triggers18 triggers
18 triggers
 
Ejemplo de Trigger en Mysql
Ejemplo de Trigger en MysqlEjemplo de Trigger en Mysql
Ejemplo de Trigger en Mysql
 
San triggers
San triggersSan triggers
San triggers
 
Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)
 
Triggers disparador
Triggers disparadorTriggers disparador
Triggers disparador
 
Tutorial disparadores
Tutorial disparadoresTutorial disparadores
Tutorial disparadores
 
database trig
database trigdatabase trig
database trig
 
TRIGGERS
TRIGGERSTRIGGERS
TRIGGERS
 

Más de ROMARIO MONTALVAN CASTILLO (14)

Oltp: Procesamiento de Transacciones en Linea
Oltp: Procesamiento de Transacciones en LineaOltp: Procesamiento de Transacciones en Linea
Oltp: Procesamiento de Transacciones en Linea
 
Diapositivas
DiapositivasDiapositivas
Diapositivas
 
Vistas
VistasVistas
Vistas
 
COMANDOS ddl
COMANDOS ddlCOMANDOS ddl
COMANDOS ddl
 
Objeto connection
Objeto connectionObjeto connection
Objeto connection
 
Diapositivas grupo dina roma y maga
Diapositivas grupo dina roma y magaDiapositivas grupo dina roma y maga
Diapositivas grupo dina roma y maga
 
Gestor de base de datos
Gestor de base de datosGestor de base de datos
Gestor de base de datos
 
Result set
Result setResult set
Result set
 
Statemment
StatemmentStatemment
Statemment
 
Connection en Java
Connection en JavaConnection en Java
Connection en Java
 
Java con b ds
Java con b dsJava con b ds
Java con b ds
 
JDBC
JDBCJDBC
JDBC
 
Java
JavaJava
Java
 
Qué es java
Qué es javaQué es java
Qué es java
 

Último

Cuadernillo de las sílabas trabadas.pdf
Cuadernillo de las sílabas trabadas.pdfCuadernillo de las sílabas trabadas.pdf
Cuadernillo de las sílabas trabadas.pdfBrandonsanchezdoming
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosCesarFernandez937857
 
Movimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en VenezuelaMovimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en Venezuelacocuyelquemao
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdfOswaldoGonzalezCruz
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
plan-de-trabajo-colegiado en una institucion educativa
plan-de-trabajo-colegiado en una institucion educativaplan-de-trabajo-colegiado en una institucion educativa
plan-de-trabajo-colegiado en una institucion educativafiorelachuctaya2
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxdanalikcruz2000
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas123yudy
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinavergarakarina022
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDUgustavorojas179704
 

Último (20)

Cuadernillo de las sílabas trabadas.pdf
Cuadernillo de las sílabas trabadas.pdfCuadernillo de las sílabas trabadas.pdf
Cuadernillo de las sílabas trabadas.pdf
 
Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos Básicos
 
Movimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en VenezuelaMovimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en Venezuela
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
Repaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia GeneralRepaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia General
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
plan-de-trabajo-colegiado en una institucion educativa
plan-de-trabajo-colegiado en una institucion educativaplan-de-trabajo-colegiado en una institucion educativa
plan-de-trabajo-colegiado en una institucion educativa
 
La Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdfLa Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdf
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karina
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
 

Gestión de triggers en bases de datos

  • 1. TRIGGER -ACTIVADORES ALUMNOS: Romario Montalvan Castillo. Dina Leon Tapia. BASES DE DATOS
  • 2. Trigger Un trigger es un procedimiento almacenado asociado con una tabla, el cual se ejecuta automáticamente cuando se modifica un dato de esa tabla ¿Se puede llamar explícita- mente? ¿Se puede ejecutar automática- mente? ¿Puede usar parámetros? Procedimiento definido por el usuario Sí No Sí Trigger No Sí No
  • 3. Trigger - Aplicaciones Típicas • Hacer modificarciones en cascada sobre tablas relacionadas • Deshacer cambios que violan la integridad de los datos • Forzar restricciones que son muy complejas para reglas y restricciones • Mantener datos duplicados • Mantener columnas con datos derivados • Hacer ajustes de registros
  • 4. Trigger - Definición • Un trigger se define asociado con una tabla para una o más sentencias de manipulación de datos – Un trigger se puede definir para insert, update, o delete o cualquier combinación de ellos
  • 5. Trigger - Activación • Cuando se modifica un dato en una tabla que tiene declarado un trigger para esa sentencia, el trigger se “dispara” – El trigger se dispara una vez, independientemente del número de filas afectadas – El trigger se dispara aunque no hayan filas afectadas
  • 6. Triggers and transacciones • Un trigger es parte de la transacción que causa el disparo • El trigger puede deshacer: – Así mismo solamente – Así mismo y la sentencia que causa el disparo – La transacción total
  • 7. Trigger - Reglas • Los triggers pueden: – Declarar variables locales – Invocar procedimientos almacenados • Los triggers no pueden: – Llamarse directamente – Usar parámetros – Definirse sobre tablas temporales o vistas – Crear objetos permanentes de base de datos • Las operaciones con registro mínimo (como select into) no disparan los triggers
  • 8. Trigger - Crear • Sintaxis simplificada: create trigger trigger_name on table_name for {insert | update | delete} [, {insert | update | delete} ...] as sql_statements • Ejemplo: create trigger trg_i_sales on sales for insert as if datename (dd,getdate()) = "Sun" begin raiserror 40070, "Sales cannot be processed on Sunday." rollback trigger end
  • 9. Borrar Triggers • Sintaxis simplificada: drop trigger trigger_name • Ejemplo: drop trigger trg_i_sales
  • 10. Procedimientos del sistema para Triggers • sp_depends {table_name | trigger_name} – Cuando se da el nombre de tabla, lista todos los objetos (incluyendo triggers) de la misma base de dtos – Cuando se da el nombre de trigger, lista todas las tablas referencias • sp_help trigger_name – Muestra información del trigger • sp_helptext trigger_name – Muestra el código usado para crear el trigger • sp_rename old_trigger_name, new_trigger_name – Cambia el nombre del trigger
  • 11. Trigger - ejemplo • Crear dos tablas: select * into myauthors from pubs2..authors create table myrecord ( mytime datetime, myrows int ) • Crear un trigger que guarde la fecha y número de filas afectadas por cada delete: create trigger trg_d_myauthors on myauthors for delete as insert into myrecord values (getdate(), @@rowcount) return
  • 12. Triggers - ejemplo • Ejecutar un delete y ver la tabla myrecords: delete from myauthors where state = "CA" select * from myrecord • Ejecutar un delete que no afecta filas y ver la tabla myrecords : delete from myauthors where 1 = 2 select * from myrecord • Borrar los objetos de base de datos creados: drop table myauthors, myrecord
  • 13. Trigger - Tablas inserted y deleted • inserted y deleted son dos tablas que se crean automáticamente cada vez que se dispara un trigger – inserted almacena cualquier fila que se vaya a añadir a la tabla – deleted almacena cualquier fila que se vaya a borrar de la tabla
  • 14. Trigger - Borrados • A delete adds rows to the deleted table
  • 15. Trigger - Uso de la tabla deleted create trigger trg_d_publishers on publishers for delete as -- Exit trigger if no rows were modified. if @@rowcount = 0 return -- For deleted publishers, delete -- corresponding titles delete titles from titles t, deleted d where t.pub_id = d.pub_id -- Appropriate actions would take place here -- since a deleted publisher has far-reaching -- effects throughout the database. return
  • 16. Trigger - Inserciones • insert añade filas en la tabla inserted
  • 17. Trigger - Uso de la tabla inserted -- Make sure all au_ids match if (select count(*) from authors a, inserted i where a.au_id=i.au_id ) <> @num_rows begin raiserror 31114 "Attempt to insert invalid au_id into titleauthor." rollback transaction return end return Go -- Insert and update trigger on titleauthor create trigger trg_iu_titleauthor on titleauthor for insert, update as -- Find out how many rows were modified declare @num_rows int select @num_rows=@@rowcount if @num_rows=0 return -- Make sure all title_ids match if (select count(*) from titles t, inserted i where t.title_id=i.title_id) <> @num_rows begin raiserror 31113 "Attempt to insert invalid title_id into titleauthor." rollback transaction return end
  • 18. Trigger - Actualizaciones Un update añade filas en ambas tablas
  • 19. -- Insert, update, and delete trigger on salesdetail create trigger trig_iud_salesdetail on salesdetail for insert, update, delete as -- Exit trigger if no rows were modified. if @@rowcount = 0 return -- If a new quantity has been inserted or updated for a -- given title_id, add the value to titles.total_sales. The -- isnull function is used because titles.total_sales might -- be NULL. update titles set total_sales = isnull(total_sales, 0) + (select sum(qty) from inserted where titles.title_id = inserted.title_id) where title_id in (select title_id from inserted) -- If an old quantity has been updated or deleted for a -- given title_id, subtract the value from -- titles.total_sales. The isnull function is used because -- titles.total_sales might be NULL. update titles set total_sales = isnull(total_sales, 0) - (select sum(qty) from deleted where titles.title_id = deleted.title_id) where title_id in (select title_id from deleted) return Trigger - Tablas inserted y deleted
  • 20. Trigger - Reglas para tablas inserted y deleted • Ambas tablas tienen las mismas columnas que la tabla asociada al trigger • El trigger puede consultar datos de las dos tablas – Otros procesos no pueden consultar datos de las dos tablas • El trigger no puede modificar datos en las dos tablas • Cada anidamiento de triggers tiene sus propias tablas inserted y deleted – Si un trigger modifica datos de su tabla asociada, esos cambios no se reflejan en las tablas inserted and deleted de ese trigger
  • 21. Trigger - Tablas inserted and deleted • Crear una tabla: select * into myauthors from pubs2..authors • Crear un trigger que use la función suser_name( ) para listar la(s) fila(s) que se borraron y el nombre del usuario: create trigger trg_d_myauthors on myauthors for delete as select suser_name(), "deleted these rows:" select * from deleted return • Ejecutar un delete que afecte más de una fila: delete from myauthors where state = "CA“ • Ejecutar un delete que no afecte filas: delete from myauthors where 1 = 2 • Borrar los objetos de base de datos: drop table myauthors
  • 22. Triggers y rollbacks • Tres tipos de rollbacks: – Deshacer el trigger – Deshacer el trigger y la sentencia que lo disparó – Deshacer toda la transacción
  • 23. Deshacer un trigger • Para deshacer un trigger, declarar un punto de grabación y luego hacer el rollback – Un rollback sin punto de grabación deshace toda la transacción Procedimiento almacenado Caso A begin tran ... insert ... print "in sp" ... commit tran print "sp done" Trigger save tran s1 .... rollback tran s1 print “tr done” return Procedimiento almacenado Caso B begin tran ... (este caso insert ... ocaciona un print "in sp" error) ... commit tran print "sp done" Trigger begin tran s2 .... rollback tran s2 print “tr done” return
  • 24. • rollback trigger deshace el trigger y la sentencia que lo disparó • Sintaxis: rollback trigger [with raiserror error_number [error_statement] ] • Ejemplo: create trigger trg_i_publishers on publishers for insert as if @@rowcount > 1 begin rollback trigger with raiserror 40031 "You cannot insert more than one publisher at a time." return end Deshacer un trigger
  • 25. Procedimiento almacenado Caso C begin tran ... insert ... print "in sp" ... commit tran print "sp done" Trigger .... .... rollback trigger print “tr done” return Deshacer un trigger
  • 26. Procedimiento almacenado Case D begin tran ... insert ... print "in sp" ... commit tran print "sp done" Trigger begin tran ... rollback tran print "tr done” return Para deshacer toda la transacción donde está inmerso el trigger, ejecutar un rollback sin un punto de grabación Procedimiento almacenado Case E begin tran ... insert ... print "in sp" ... commit tran print "sp done" Trigger .... .... Rollback tran print “tr done” return Deshacer una transacción
  • 27. -- Book price can be updated if: -- 1) only one title is updated at a time -- 2) the update occurs during the work week -- 3) the price changes by 10% or less -- 4) only books with sales > 0 are updated create trigger trg_u_titles on titles for update as declare @num_rows int select @num_rows = @@rowcount if @num_rows = 0 return -- 1) only one title at a time if @num_rows > 1 begin rollback trigger with raiserror 20011 "Can only update or add one title at a time." return end -- 2) occurs during the work week if (select datepart(dw, getdate())) in (1, 7) begin rollback trigger with raiserror 20012 "Can only update price during work day." return end -- 3) the price changes by 10% or less if (select new.price/old.price from inserted new, deleted old) not between 1.10 and 0.90 begin rollback trigger with raiserror 20013 "Can only change price by 10 percent." return end -- 4) only books with sales > 0 if (select isnull(total_sales, 0) from inserted) <= 0 begin rollback trigger with raiserror 20014 "Can only change price of book with sales." return end return go Triggers y rollbacks
  • 28. Trigger - Prácticas recomendadas • Consideraciones al elaborar triggers: – @@rowcount – if update – triggers anidados – triggers recursivos
  • 29. Trigger - if update • if update es una condición que le permite a un trigger chequear si ha habido un cambio en una determinada columna • Sólo se puede usar en triggers • Usualmente se usa para chequear si el valor de una llave primaria ha cambiado • Sintaxis simplificada: if update (column_name) [ {and | or} update (column_name)]...
  • 30. -- Update trigger on publishers table create trigger trg_u_publishers on publishers for update as -- Find out how many rows were modified declare @num_rows int select @num_rows=@@rowcount if @num_rows=0 return if update ( pub_id ) -- Was primary key updated? begin -- Multiple updated rows not allowed if @num_rows > 1 begin raiserror 31113 "Updates to primary keys of multiple rows is not permitted." rollback transaction return end -- Cascade update to titles table update titles set t.pub_id = new.pub_id from titles t, inserted new, deleted old where t.pub_id = old.pub_id end return Trigger - if update
  • 31. Triggers anidados • Un trigger anidado es un trigger que se dispara en respuesta a una modificación hecha en un trigger • Nivel máximo de anidamiento: 16 – Tanto los procedimientos almacenados como los triggers cuentan en la determinación del nivel máximo – @@nestlevel retorna el nivel de anidamiento
  • 32. Triggers recursivos • Un trigger recursivo es aquel que se dispara cuando modifica su propia tabla • Por default, un trigger que modifica su propia tabla no causa un disparo recursivo del trigger
  • 33. Métodos para integridad de datos Dos métodos para implementar integridad de datos Integridad a nivel de Dominio Integridad a nivel de Entidad Integridad Referencial Restricciones Checks Primary key, restricciones unique Referencias Objetos de base de datos Reglas Indices Triggers
  • 34. Actualización de valores llave • Solamente en triggers es posible borrar o actualizar una llave primaria • Sólo en triggers es posible hacer cambios en cascada Acción deseada Restricciones Triggers Insertarar valor de llave primaria Permitido Permitido Insertar valor de llave foránea Permitido Permitido Actualizar valor de llave primaria No permitido* Permitido Actualizar valor de llave foránea Permitido Permitido Borrar valor de llave primaria No permitido* Permitido Borrar valor de llave foránea Permitido Permitido * Valores de llaves primarias se pueden actualizar o borrar si no están referencidos en llaves foráneas
  • 35. Ejemplo para mantener la integridad referencial de la llave foránea cuando se inserta o actualiza la tabla salesdetail: Ejemplo create trigger trg_iu_sales on salesdetail for insert, update as declare @num_rows int select @num_rows = @@rowcount if @num_rows = 0 return if (select count (*) from titles t, inserted i where t.title_id = i.title_id) <> @num_rows rollback transaction if (select count (*) from sales s, inserted i where s.stor_id = i.stor_id and s.ord_num = i.ord_num) <> @num_rows rollback transaction return create table salesdetail (stor_id char(4) NOT NULL, ord_num varchar(20) NOT NULL, title_id typ_ch_tid NOT NULL references titles(title_id), qty smallint NOT NULL, discount float NOT NULL, constraint ref_salesdet foreign key (stor_id, ord_num) references sales (stor_id, ord_num) )
  • 36. Ejemplo para mantener la integridad referencial de la llave foránea cuando se inserta o actualiza la tabla salesdetail: Ejemplo create trigger trg_du_titles on titles for delete, update as -- prevent delete or update of -- title_id if there are foreign key -- values that reference them .. return create trigger trg_du_sales on sales for delete, update as -- prevent delete or update of -- stor_id/ord_num if there are -- foreign key values that -- reference them ... return
  • 37. Restricciones versus triggers • Ventajas de las restricciones: – Las restricciones (y reglas) son más rápidas que los triggers – Las restricciones no requieren codificación adicional – Es mejor para chequear datos antes de ingresarlos a la base de datos • Ventajas de los triggers: – Muy flexible • Los triggers pueden hacer cualquier cosa que se pueda codificar – Mejor para las reglas complejas del negocio que no se pueden expresar como restricciones referenciales tales como actualizaciones o borrados en cascada