Base de datos I

Anuncio
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


Descargar