1 Base de datos I Facultad de Ingeniería. Escuela de computación. 2 Base de datos I, Guía 10 Introducción Este manual ha sido elaborado para orientar al estudiante de Bases de datos I en el desarrollo de sus prácticas de laboratorios, haciendo uso de este antes, durante y después de la práctica, de tal forma que ofrece un método facilitador en su proceso de enseñanza/aprendizaje durante esta asignatura. En el desarrollo de esta asignatura se ha designado realizar las prácticas en 16 sesiones semanales de laboratorios, los que incluyen 11 prácticas, dos parciales y un proyecto final durante los cuales, el estudiante aplicará los conceptos y las técnicas fundamentalmente necesarias para el dominio de programas para el uso, configuración y administración de SQL Server 2008 o superior. Todas las guías de laboratorio están estructuradas de la siguiente forma: - Objetivos - Materiales y equipos - Introducción teórica - Procedimiento - Bibliografía - Hoja de evaluación (En caso de que la actividad sea evaluada) Base de datos I. Guía 10 3 Facultad: Ingeniería. Escuela: Computación. Asignatura: Base de datos I. Tabla de Contenido Pág. Guía 10. Desencadenadores. Guía 6 a 1 Contenido ----------------------------------------------- 4 Objetivos ----------------------------------------------- 4 Materiales y equipos ------------------------------------ 4 Introducción -------------------------------------------- 4 Desencadenadores / Triggers ----------------------------- 4 RAISEEROR ----------------------------------------------- 5 ROLLBACK TRANSACTION ------------------------------------ 5 DISABLE TRIGGER y ENABLE TRIGGER ------------------------ 5 Procedimiento ------------------------------------------- 9 Ejercicios ---------------------------------------------- 19 Investigación ------------------------------------------- 19 Bibliografía -------------------------------------------- 19 4 Base de datos I, Guía 10 Tema: Desencadenadores. Contenidos En la guía se presentarán conceptos que les permitan a los estudiantes poder hacer uso de Desencadenadores / Triggers. Objetivo Específico Automatizar de datos, procedimientos dentro de por medio de disparadores. la base Materiales y Equipo SQL SERVER 2008 o superior. Guía de práctica. Base de datos de ejemplo: scrum2. https://msdn.microsoft.com/es-sv/library/ms189799.aspx https://msdn.microsoft.com/es-sv/library/ms175941.aspx Introducción Teórica Muchas veces es importante el poder proteger nuestras tablas y registros de acciones accidentales o procesos que como diseñadores no queremos que se realicen, una forma de lograr este objetivo es el uso de Triggers. Es importante mencionar que se deben tener los permisos necesarios para hacer algunos procesos, y algunos de los procesos que signifiquen transacciones muy peligrosas deben de ser realizadas con mucho cuidado. Desencadenadores / Triggers Un desencadenador es una clase especial de procedimiento almacenado que se ejecuta automáticamente cuando se produce un evento en el servidor de bases de datos. Los Base de datos I. Guía 10 5 desencadenadores DML se ejecutan cuando un usuario intenta modificar datos mediante un evento de lenguaje de manipulación de datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista. Estos desencadenadores se activan cuando se desencadena cualquier evento válido, con independencia de que las filas de la tabla se vean o no afectadas. Los desencadenadores DDL se ejecutan como respuesta a diversos eventos del lenguaje de definición de datos (DDL). Estos eventos corresponden principalmente a instrucciones CREATE, ALTER y DROP de Transact-SQL, y a determinados procedimientos almacenados del sistema que ejecutan operaciones de tipo DDL. RAISERROR Genera un mensaje de error y se inicia el proceso de errores para la sesión. RAISERROR puede o bien hacer referencia a un mensaje definido por el usuario almacenado en el sys.messages vista de catálogo o construir un mensaje dinámicamente. ROLLBACK TRANSACTION Revierte una transacción explícita o implícita al principio de la operación, o en un punto de almacenamiento dentro de la transacción. Puede usar ROLLBACK TRANSACTION para borrar todas las modificaciones de datos realizadas desde el inicio de la operación o de un punto de retorno. También libera los recursos retenidos por la transacción. DISABLE TRIGGER y ENABLE TRIGGER También puedo activar (Enable) o desactivar (Disable) los disparadores, para realizar algunos procesos o transacciones sin que se cumplan estos, también nos sirven de mucha ayuda para realizar migraciones de datos. FORMA GRAFICA En primer lugar seleccionamos la base de datos en que quiero trabajar y la expando, para nuestro ejemplo tomaremos la tabla roles, y seleccionaremos “Triggers”, según muestra la figura. 6 Base de datos I, Guía 10 Presionaremos clic derecho y presionamos “New Triggers”, lo cual nos crear una nueva consulta que nos mostrara la siguiente información: -- ================================================ -- Template generated from Template Explorer using: -- Create Trigger (New Menu).SQL --- Use the Specify Values for Template Parameters -- command (Ctrl-Shift-M) to fill in the parameter -- values below. --- See additional Create Trigger templates for more -- examples of different Trigger statements. --- This block of comments will not be included in -- the definition of the function. -- ================================================ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= CREATE TRIGGER <Schema_Name, sysname, Schema_Name>.<Trigger_Name, Trigger_Name> ON <Schema_Name, sysname, Schema_Name>.<Table_Name, Table_Name> AFTER<Data_Modification_Statements,,INSERT,DELETE,UPDATE> AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; --Insert statements for trigger here END GO sysname, sysname, Base de datos I. Guía 10 7 Lo que haremos es editar este código y lo dejaremos de la siguiente manera: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TRIGGER protege_roles ON roles AFTER INSERT,DELETE,UPDATE AS BEGIN SET NOCOUNT ON; RAISERROR ('Esta tabla, no permite actualizar, modificar y agregar', 1, 1) ROLLBACK TRANSACTION END GO Ahora prueba resultados. las siguientes transacciones y mira los INSERT INTO roles VALUES ('Nuevo Rol') UPDATE roles SET rol = 'Project Manager' WHERE id_rol = 1 Estas dos consultas nos mostraran el mensaje 'Esta tabla, no permite actualizar, modificar y agregar' No probaremos DELETE porque la relación no me lo permitirá. Ahora para desactivar este Triggers haremos lo siguiente, lo buscaremos en el explorador de soluciones, base de datos, tabla, triggers como lo muestra la siguiente figura: 8 Base de datos I, Guía 10 Al seleccionar “Disable” nos mostrara el siguiente aviso. Ahora probemos nuevamente las siguientes consultas y veamos cómo funcionan. INSERT INTO roles VALUES ('Nuevo Rol') UPDATE roles SET rol = 'Project Manager' WHERE id_rol = 1 DELETE roles WHERE rol = 'Nuevo Rol' Verán que las transacciones se realizan con normalidad. Si queremos borrar o modificar el disparador, podemos presionando clic derecho sobre el triggers y seleccionar “Delete” para borrar o “Modify” para cambiarla. POR CONSOLA (T-SQL) Vamos a crear un disparador que me proteja los descuentos de las personas, no permitiendo que estos sean borrados, el nombre del disparador será “protege_descuentos” y lo programaremos de la siguiente forma. CREATE TRIGGER protege_descuentos ON descuentos AFTER DELETE AS BEG IN RAISERROR ('No puedes descuentos', 16, 1) ROLLBACK TRANSACTION RETURN END Ahora si tratas de borrar un registro o todos te mostrara el siguiente error. Base de datos I. Guía 10 9 Ahora haremos otro ejemplo que llamaremos “limite_descuento” en el cual usaremos un subconsulta para permitir que se realice o no la transacción. CREATE TRIGGER limite_descuento ON descuentos AFTER INSERT AS IF EXISTS (SELECT * FROM descuentos WHERE monto > 75) BEGIN RAISERROR ('No se puede realizar este descuento es muy alto', 16, 1) ROLLBACK TRANSACTION RETURN END Procedimiento Iniciar el SQL Server Management Studio. Bibliografía En base a lo aprendido en la práctica anterior crearemos una base Guíade1 datos de nombre Universidad. Expandiremos la base de datos, y después expandiremos “Tables”, y veremos que no hay ninguna tabla creada, al seleccionar click derecho sobre “Tables” seleccionamos “New Table”. 10 Base de datos I, Guía 10 Nos activara una pantalla donde podremos colocar los campos y tipos de datos que esperamos manejar en cada uno de los campos. Base de datos I. Guía 10 11 En la “Column Name” empezaremos definiendo el campo “id_person” y tomaremos como “Data Type” el tipo “int” y dejaremos activa la casilla “Allow Nulls” lo cual significa que acepta datos nulos o vacíos. Después colocaremos el campo “nombre” con tipo de datos “varchar(50)” y dejaremos activa la opción aceptar nulos. 12 Base de datos I, Guía 10 También colocaremos el campo “apellido” con tipo de datos “varchar(50)” y dejaremos activa la opción aceptar nulos. Una vez terminada la tabla, dar doble click en la pestaña y dar click sobre “Save Table_1”, y nos aparecerá un pantalla donde le pondremos de nombre a la tablas “person”. Base de datos I. Guía 10 13 Una vez realizado este proceso la tabla quedará grabada en la base de datos, ya puedo cerrar la consola o dejarla así. Ahora vamos a agregar algunos registros a la tabla, en la carpeta “Tables”, busco la tabla “person” y presiono click derecho y seleccionamos “Edit top 200 Rows” lo cual nos permitirá agregar registros. A continuación agregue los siguientes registros: 14 Base de datos I, Guía 10 Para borrar la tabla solo debo dar click derecho sobre la tabla “person” y seleccionar “Delete” Dar click en aceptar para proceder a borrarla. Usando la consola de consultas (T-SQL). En primer lugar activaremos la consola para realizar una nueva consulta. Ahora digitemos los siguientes comandos la consola y luego se ejecuta la instrucción. Base de datos I. Guía 10 15 Estas sentencias en primer lugar selecciona la base de datos Universidad usando la palabra “USE”, después se creó la tabla “autos” con tres campos: id_auto, marca y modelo, con su respectivo tamaño e indicando que todos aceptan nulos o valores vacíos (NULL). Para probar la nueva tabla agregaremos nuestro primer registro, digitando lo siguiente: El resultado de esta consulta es la adición de un registro a la tabla autos. Otra forma de agregar datos usando una variable de la sintaxis es la siguiente: Para borrar la tabla usaremos la siguiente consulta Y con esto quedara borrada la tabla. 16 Base de datos I, Guía 10 Base de datos scrum2 CREATE DATABASE scrum2 GO USE scrum2 GO CREATE TABLE roles ( id_rol int IDENTITY(1,1), rol varchar(20) not null, CONSTRAINT PK_roles PRIMARY KEY (id_rol) ) CREATE TABLE pais ( id_pais int IDENTITY(1,1), pais varchar(25), CONSTRAINT PK_pais PRIMARY KEY (id_pais) ) CREATE TABLE personas ( id_persona int IDENTITY(1,1), apellido varchar(40) not null, nombre varchar(40) not null, sueldo smallmoney, celular varchar(8), sexo varchar(1), nacimiento date, id_rol int not null, id_pais int not null, CONSTRAINT PK_persona PRIMARY KEY (id_persona), CONSTRAINT FK_perrol FOREIGN KEY (id_rol) REFERENCES roles(id_rol), CONSTRAINT FK2_perpais FOREIGN KEY (id_pais) REFERENCES pais(id_pais) ) CREATE TABLE tipo_descuento ( id_tipodes int IDENTITY(1,1), descuento varchar(40) not null, CONSTRAINT PK_descu PRIMARY KEY (id_tipodes) ) CREATE TABLE descuentos ( id_descu int IDENTITY(1,1), monto smallmoney, fecha date, id_persona int not null, id_tipodes int not null, CONSTRAINT PK_descuentos PRIMARY KEY (id_descu), CONSTRAINT FK_desper FOREIGN KEY (id_persona) REFERENCES personas(id_persona), CONSTRAINT FK2_destipo FOREIGN KEY (id_tipodes) REFERENCES tipo_descuento(id_tipodes) ) Base de datos I. Guía 10 17 INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO roles roles roles roles roles roles roles INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO pais VALUES ('El Salvador') pais VALUES ('Guatemala') pais VALUES ('Costa Rica') pais VALUES ('Japon') pais VALUES ('Estados Unidos') pais VALUES ('Argentina') pais VALUES ('Mexico') pais VALUES ('Uruguay') pais VALUES ('Canada') pais VALUES ('Chile') INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas personas INTO INTO INTO INTO INTO VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES ('ScrumMaster') 'ProductOwner') ('Team') ('Steakholders') ('Tester') 'Developer') ('Designer') ('Hernandez Mancia','Marielos',958,'67567555','F','1986/7/4',3,4) ('Perez Juarez','Joaquin',850,'34567564','M','1969/9/2',3,1) ('Solis Castro','Eduardo',600,'12327523','M','1972/3/11',3,1) ('Ramos Nieto','Jorge',550,'34567174','M','1972/10/4',4,1) ('Hernandez Carias','Johanna',1800,'34234809','F','1952/3/4',1,1) ('Romero Peña','Manuel Alberto',0,'34567342','M','1969/12/4',2,1) ('Garcia Alvarado','Roxana',1600,'34345564','F','1970/4/4',1,1) ('Torres Castro','Alfredo',450,'34565674','M','1980/2/9',3,5) ('Romero Peña','Verenice',400,'34567589','F','1978/3/17',3,1) ('Martinez','Evelyn Roxana',340,'34556764','F','1972/8/14',3,5) ('Siguenza','Eduardo',1120,'21467564','M','1975/10/9',3,1) ('Alas Duran','Martin',1200,'34562364','M','1972/3/4',3,1) ('Jerez M.','Jose Carlos',589,'34563352','M','1972/3/6',4,1) ('Bolaños Cea','Sandra',244,'67557564','F','1968/3/4',3,1) ('Cuestas D.','Jenny Maria',1089,'34567564','F','1972/9/14',3,4) ('Solorzano','Veronica',400,'34567589','F','1978/3/17',3,8) ('Martir','Roxana Maria',740,'34556764','F','1972/8/14',3,9) ('Siliezar','Eduardo Jose',920,'21467564','M','1975/10/9',3,8) ('Alas Dimas','Martin Alberto',1250,'34562364','M','1972/3/4',3,9) ('Juarez Gomez','Andrea',389,'34563352','F','1972/3/6',4,10) ('Bolaños Cea','Jenniffer',644,'67557564','F','1968/3/4',3,9) ('Palacios','Jenny Maria',1289,'34567564','F','1972/9/14',3,10) ('Gonzalez','Jenny Maria',789,'34567564','F','1987/9/13',7,4) ('Salas Valencia','Veronica',350,'34567589','F','1983/3/5',7,8) ('Mendez Rivera','Roxana Maria',1450,'34556764','F','1990/9/14',6,9) ('Salgado','Eduardo Jose',456,'21467564','M','1978/10/9',3,8) ('Menjivar','Martin Alberto',1000,'34562364','M','1969/3/4',3,9) ('Gomez Arriaza','Andrea',322,'34563352','F','1960/3/6',6,10) ('Menendez V.','Jenniffer',1080,'67557564','F','1979/4/14',3,9) ('Pocasangre','Jenny Maria',789,'34567564','F','1970/9/24',5,10) ('Perez','Jenny Maria',485,'34567564','F','1996/3/8',5,10) tipo_descuento tipo_descuento tipo_descuento tipo_descuento tipo_descuento INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO VALUES VALUES VALUES VALUES VALUES ('Personal') ('Llegada Tardia') ('Amonestacion') ('Bancaria') ('Cooperativa') descuentos VALUES (34.5,'2014/1/14',1,1) descuentos VALUES (11.2,'2014/1/17',10,1) descuentos VALUES (5,'2014/1/19',21,2) descuentos VALUES (6.78,'2014/1/21',11,1) descuentos VALUES (50,'2014/1/30',9,5) descuentos VALUES (16.78,'2014/1/15',3,3) descuentos VALUES (22,'2014/1/4',2,4) descuentos VALUES (15,'2014/1/23',10,1) descuentos VALUES (18.8,'2014/1/29',2,3) descuentos VALUES (21,'2014/1/30',9,2) descuentos VALUES (1.5,'2014/2/3',10,3) descuentos VALUES (7.5,'2014/2/9',2,4) descuentos VALUES (23.1,'2014/2/12',9,4) descuentos VALUES (3.5,'2014/2/4',13,3) descuentos VALUES (9.2,'2014/2/7',19,4) 18 Base de datos I, Guía 10 INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO descuentos VALUES (15,'2014/2/15',20,4) descuentos VALUES (16.8,'2014/2/20',13,2) descuentos VALUES (21,'2014/2/22',29,5) descuentos VALUES (34.5,'2014/3/1',9,3) descuentos VALUES (11.2,'2014/3/5',25,2) descuentos VALUES (5,'2014/3/6',7,5) descuentos VALUES (16.3,'2014/3/9',16,1) descuentos VALUES (50,'2014/3/15',17,5) descuentos VALUES (6.78,'2014/3/18',3,1) descuentos VALUES (50,'2014/3/21',22,1) descuentos VALUES (5,'2014/3/23',10,3) descuentos VALUES (8.8,'2014/3/29',2,4) descuentos VALUES (23,'2014/3/30',9,5) Base de datos I. Guía 10 19 Ejercicios Guía- 3Elabore un disparador para cada tabla de la base de datos. - Cree una vista y pruebe si puede usar disparadores Guía 4con ella. - Realice disparadores usando subconsultas. fía Investigación Complementaria Investigar las siguientes comando que se Guía 3 continuación: - Concepto, - Sintaxis, - Ejemplo. detallan a Conexión de Base de Datos. Guía 4 fía Bibliografía Peter Rob, Carlos Coronel, SISTEMAS DE BASES DE DATOS, Thomas Connolly, Carolyn Begg, SISTEMAS DE BASES DE DATOS, PERSON, España, 2007 4 Abraham Silberschatz, FUNJDAMENTOS DE BASES DE DATOS, MCGRAW-HILL, Edición Digital, 2006 Salazar Francisco, APRENDA SQL SERVER 2012. Ross Mistry and Stacia Misner. Introducing Microsoft SQL Server 2012. MicroSoft Press. Disponible digitalmente en Recursos electronicos de la biblioteca en Google Académico. Guía 3 THOMSON, México, 2006 Guía fía