Conceptos de Bases de Datos Relacionales Triggers

Documentos relacionados
Procedimientos Almacenados Activadores (triggers) Curso Bases de Datos

TRANSACCIONES, AISLAMIENTO Y CANDADOS. Bases de Datos Ingeniería de Sistemas Universidad Nacional de Colombia 2013

Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers

Catedra de Base de Datos

PROCEDIMIENTOS ALMACENADOS Y TRIGGERS. Bases de Datos Ingeniería de Sistemas y Computación Universidad Nacional de Colombia 2007

Catedra de Base de Datos

Se crean para conservar la integridad referencial y la coherencia entre los datos entre distintas tablas.

Triggers 27/11/2014. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers en Oracle

HERRAMIENTAS DE SISTEMAS DE GESTION DE BASES DE DATOS

5.1 Procedimientos y Funciones Almacenados. 5.2 Disparadores (Triggers).

Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a realizar:

Diseño de bases de datos

Triggers. Introducción

PL/SQL avanzado: Secuencias, triggers, cursores y subprogramas

1. Se usará la Base de Datos llamada. 2. Borrar la tabla CtasBanc anterior y crearla: 5.1 Procedimientos y Funciones Almacenados SQL Server

Bases de Datos Ejercicio Número 2 Bogotá, Diciembre 5 de 2013

Transacciones Curso de Bases de Datos

SQL SERVER APLICADO (SSA010)

Triggers en PL/SQL. Jonathan Medina Gómez Facultad de Ingeniería Universidad de Antioquia

Triggers 24/12/2016. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers en Oracle

UNIVERSIDAD DEL ISTMO CAMPUS IXTEPEC LIC. INFORMATICA GRUPO 508 PROCEDIMIENTOS ALMACENADOS EN SQL SERVER 2000

6. PROGRAMACIÓN CON TRANSACT-SQL

BD Activas: Motivación

Unidad 6. Procedimientos Almacenados y Disparadores

SQL: Vistas, Triggers, y Procedimientos Almacenados

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLOGICOS ESCUELA DE COMPUTACION

Bases de Datos 2: Procedimientos Almacenados, Funciones y Triggers. Tecnólogo en Informática, sede Paysandú Bases de Datos 2

Unidad III. Bases de Datos

Transacciones en SQL Server Autor: Cesar Manivesa (manivesa)

REGLAS DE CODD DEL MODELO RELACIONAL

Disparadores (triggers)

INSTITUTO TECNOLÓGICO SUPERIOR DE ESCÁRCEGA. Organismo público descentralizado de la administración. Pública del estado de Campeche

DISPARADORES EN SQL DISPARADORES EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999

Introducción a SQL (DDL)

Manejo de Tablas y Llaves Foráneas

Práctica 3: Lenguaje SQL 2ª Parte: Definición de datos. Objetivos

Sentencias complementarias + Disparadores

PROCEDIMIENTOS ALMACENADOS

Modelamiento y Diseño de Base de Datos

TRIGGER LEONEL CADOSO ROMERO 1

Catedra de Base de Datos

Tema: Procedimientos almacenados y cursores. Facultad : Ingeniería Escuela : Computación Asignatura: SQL SERVER. GUÍA 2 Pág. 1

UNIVERSIDAD DON BOSCO

BASES DE DATOS AVANZADAS Transacciones en MYSQL

Características del lenguaje SQL

SQL. (...la guía básica de supervivencia de dmi) Universidad de los Andes Demián Gutierrez Enero

TRANSACT-SQL, DISEÑO Y PROGRAMACIÓN DE BASES DE DATOS EN SQL SERVER 2008

EJEMPLOS PRÁCTICOS SQL

Implementación de desencadenadores

Access SQL: DDL y DML. Una empresa de Ingeniería precisa una base de datos para la gestión de sus proyectos.

ÍNDICE. Introducción... Capítulo 1. Características, instalación, inicio y entorno de trabajo... 1

Oracle Database 11g: Conceptos Fundamentales de SQL y PL/SQL Nuevo

Formato para prácticas de laboratorio

- 1 - Mg. Abril Saire Peralta

Interacción con el Servidor Oracle8. Copyright Oracle Corporation, All rights reserved.

Integridad Referencial. Restricciones (constraints)

Tipos de datos en SQL. SQL. DDL (Data Definition Language) CREATE DOMAIN CREATE TABLE CREATE TABLE. CREATE TABLE con restricciones de atributo

Índice. iii. Objetivos... 24

CURSORES. Preparó: Ismael Castañeda Fuentes Fuentes: Manuales Sybase Manuales Oracle

departamento NUMBER(3) FK (DEPARTAMENTOS.CODIGO) salario NUMBER(3) NOT NULL fecha_alta DATE NOT NULL jefe NUMBER(5) FK (EMPLEADOS.

Tablas -SQL Curso Bases de Datos. Por Elizabeth León Guzmán, Ph.D. Profesora Ingeniería de Sistemas Grupo de Investigación MIDAS

SQL Server Definición de los índices

Transacciones, copias de seguridad. Xochitl Clemente Parra Armando Méndez Morales

Manipulación de Datos. Copyright Oracle Corporation, All rights reserved.

INTRODUCCIÓN A LAS BASES DE DATOS. L.I Gerardo Benavides Pérez

Examen de Bases de datos Grado de Ingeniería en Informática, Febrero, 2015

Restricciones de Integridad. Claves Primarias. Protección. Índice. Clave de una Relación. Declaración n de Claves

GUIA DE TRIGGERS (Disparadores) EN MYSQL

Oracle Express y Toad for Oracle

Solución Ejercicio Prac. 3b (Esquema).

Tema: DISPARADORES (TRIGGERS)

SERVICIO NACIONAL DE APRENDIZAJE SENA SISTEMA INTEGRADO DE GESTIÓN Procedimiento Ejecución de la Formación Profesional Integral GUÍA DE APRENDIZAJE

ELEMENTOS DE BASES. Restricciones de dominio. Mecanismos de integridad. SQL Restricciones en el esquema de relación. Integridad de Entidad

m047a Curso Programando una Base de Datos SQL Server 2008, 36 h Creación B.D. y Constraints

Terminología Equivalente

Oracle Database y Oracle SQL Developer

T07 Opciones de integridad referencial

UNIVERSIDAD NACIONAL DE SAN AGUSTÍN FACULTAD DE PRODUCCIÓN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS LABORATORIO DE BASES DE DATOS 1

Bases de Datos Relacionales

SERVICIO NACIONAL DE APRENDIZAJE SENA SISTEMA INTEGRADO DE GESTIÓN Procedimiento Ejecución de la Formación Profesional Integral GUÍA DE APRENDIZAJE

Triggers. BASES DE DATOS Mercedes García Merayo

INDICE CARTAS DESCRIPTIVAS S3

BASES DE DATOS 2º CURSO E.U.I. / F.I. Práctica 4: Estudio del SGBD ORACLE8 1 Gestión de transacciones 22 DE MAYO DE 2000

Administradores de Bases de Datos Studio.NET 2005 Y SQL Server Barrios

Introducción 1 Recuperación de Datos mediante la Sentencia SQL SELECT

GBD Diseño físico de DDBB

Procedimientos almacenados y Triggers

Formato para prácticas de laboratorio

Integridad referencial en MySQL

Oracle Database: Conceptos Básicos de SQL y PL/SQL

TEMA 6: LENGUAJE DE DEFINICIÓN DE DATOS (LDD)

SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC

ORACLE 10g. Descripción A QUIEN VA DIRIGIDO?

El SQL es un lenguaje estándar de programación para el acceso a bases de datos.

PL/SQL. - La unidad de programación utilizada por PL/SQL es el bloque. - Todos los programas de PL/SQL están conformados por bloques.

Laboratorio de Bases de Datos

Refactorización en Base de Datos. mayo de 2008

Departamento de Lenguajes y Sistemas Informáticos

Transcripción:

Conceptos de Bases de Datos Relacionales Triggers

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 Stored Procedure definido por el usuario Llamado explícito Ejecución automática Uso de parámetros SI No SI Trigger No SI No

Aplicaciones Típicas de triggers Hacer modificaciones 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

Definición de un trigger 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

Activación de un trigger 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 causó el disparo La transacción total

Reglas para triggers 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

Crear triggers Sintaxis simplificada: create trigger nombre_del_trigger on nombre_de_la_tabla for {insert update delete} [, {insert update delete}...] as sentencias_sql EJEMPLO: CREATE TABLE EJ_TRIGGER ( A INT PRIMARY KEY, B CHAR (30)) CREATE TRIGGER TR_I_EJ_TRIGGER ON EJ_TRIGGER FOR INSERT AS IF datename(month, getdate()) = "October" BEGIN SELECT "En Octubre no hay inserciones" ROLLBACK TRIGGER END INSERT INTO EJ_TRIGGER VALUES (2, 'Dos') SELECT * FROM EJ_TRIGGER

Borrar Triggers Sintaxis simplificada: drop trigger nombre_del_trigger

Procedimientos del sistema para procedimientos almacenados sp_depends {nombre_de_tabla nombre_del_trigger} Con nombre_de_tabla, lista todos los objetos (incluyendo triggers) de la misma base de dtos Con nombre_del_trigger, lista todas las tablas referenciadas sp_help nombre_del_trigger Muestra información del trigger sp_helptext nombre_del_trigger Muestra el código usado para crear el trigger sp_rename nombre_anterior_del_trigger, nombre_nuevo_del_trigger Cambia el nombre del trigger

Crear dos tablas: CREATE TABLE EJ_TRIGGER_2A ( A INT PRIMARY KEY, B CHAR (30)) Triggers - ejemplo CREATE TABLE EJ_TRIGGER_2B ( ID NUMERIC IDENTITY PRIMARY KEY, FECHA DATETIME, FILAS INT) Crear un trigger que guarde la fecha y número de filas afectadas por cada delete: CREATE TRIGGER TR_D_EJ_TRIGGER_2 ON EJ_TRIGGER_2A FOR DELETE AS INSERT INTO EJ_TRIGGER_2B VALUES (getdate(), @@rowcount) RETURN

Triggers - ejemplo Ejecutar los siguientes insert INSERT INTO EJ_TRIGGER_2A VALUES (5, 'Cinco') INSERT INTO EJ_TRIGGER_2A VALUES (2, 'Dos') INSERT INTO EJ_TRIGGER_2A VALUES (7, 'Siete') Ejecutar un delete y ver las tablas EJ_TRIGGER_2A y EJ_TRIGGER_2B: DELETE FROM EJ_TRIGGER_2A WHERE A > 4 SELECT * FROM EJ_TRIGGER_2A A B ----------- ------------------------------ 2 Dos SELECT * FROM EJ_TRIGGER_2B ID FECHA FILAS -------------------- ------------------------- ----------- 1 2010-10-19 02:00:13.533 2 Ejecutar un delete que no afecta filas y ver la tabla EJ_TRIGGER_2B: DELETE FROM EJ_TRIGGER_2A WHERE A > 8 SELECT * FROM EJ_TRIGGER_2B ID FECHA FILAS -------------------- ------------------------- ----------- 1 2010-10-19 02:00:13.533 2 2 2010-10-19 02:21:43.153 0

Las 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

Borrados A delete adds rows to the deleted table

Inserciones An insert adds rows to the inserted table

Actualizaciones An update adds rows to both tables

Reglas para las 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

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" Procedimiento almacenado Caso B begin tran... (este caso insert... ocaciona un print "in sp" error)... commit tran print "sp done" Trigger save tran s1... rollback tran s1 print tr done return Trigger begin tran s2... rollback tran s2 print tr done return

Deshacer un trigger 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 una transacción Para deshacer toda la transacción donde está inmerso el trigger, ejecutar un rollback sin un punto de grabación Procedimiento almacenado Caso D Trigger begin tran... insert... print "in sp"... commit tran print "sp done" Procedimiento almacenado Caso E begin tran... insert... print "in sp"... commit tran print "sp done" begin tran... rollback tran print "tr done return Trigger...... Rollback tran print tr done return

Prácticas recomendadas al hacer Triggers Consideraciones al elaborar triggers al usar: @@rowcount if update triggers anidados triggers recursivos

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)]...

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 Métodos para implementar integridad de datos Domain Integrity Entity Integrity Referential Integrity Constraints Database Objects Check constraints Primary key constraints, unique constraints References constraints Rules Indexes Triggers

Actualización de valores llave 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 Solamente en triggers es posible borrar o actualizar una llave primaria Sólo en triggers es posible hacer cambios en cascada

Restricciones vs 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