Ejemplos Prácticos de Implementación de Triggers y Restricciones SQL
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 6,97 KB
Ejemplos Prácticos de Implementación de Triggers y Restricciones SQL
Disparadores (Triggers) en SQL
Los disparadores son objetos de base de datos que se ejecutan automáticamente en respuesta a ciertos eventos, como inserciones, actualizaciones o eliminaciones de datos. A continuación, se presentan ejemplos de su implementación.
1. Disparador para Descontar Existencias al Realizar un Pedido
Este disparador se activa al insertar un nuevo registro en la tabla Pedido
y descuenta la cantidad pedida de las existencias en la tabla Producto
.
CREATE TRIGGER TR_1
ON Pedido
FOR INSERT
AS
BEGIN
UPDATE Producto
SET Existencias = Existencias - (SELECT Cantidad FROM inserted)
WHERE Id_Producto = (SELECT Id_Producto FROM inserted);
END;
2. Disparador para Revertir Existencias al Eliminar un Pedido
Este disparador se ejecuta al eliminar un registro de la tabla Pedido
y suma la cantidad eliminada de nuevo a las existencias en la tabla Producto
.
CREATE TRIGGER TR_2
ON Pedido
FOR DELETE
AS
BEGIN
UPDATE Producto
SET Existencias = Existencias + (SELECT Cantidad FROM deleted)
WHERE Id_Producto = (SELECT Id_Producto FROM deleted);
END;
3. Mostrar Disparadores Creados
Para verificar los disparadores asociados a una tabla específica, se puede utilizar el procedimiento almacenado sp_helptrigger
.
EXEC sp_helptrigger Pedido;
4. Disparador para Registrar Eliminación de Clientes en Historial
Este disparador se activa al eliminar un cliente de la tabla CLIENTES
y registra la fecha, una descripción y el usuario que realizó la eliminación en la tabla HISTORIAL
.
SELECT * FROM CLIENTES; -- Ejemplo de consulta antes de la eliminación
CREATE TRIGGER TR_1_Clientes
ON CLIENTES
FOR DELETE
AS
BEGIN
INSERT INTO HISTORIAL (Fecha, Descripción, Usuario)
VALUES (GETDATE(), 'Cliente eliminado por: ' + SUSER_SNAME(), SUSER_SNAME());
END;
Nota: Se ha renombrado el disparador a TR_1_Clientes
para evitar conflictos con TR_1
de la tabla Pedido
.
5. Disparador para Archivar Clientes Eliminados
Este disparador se ejecuta al eliminar un registro de la tabla CLIENTES
y copia el registro completo a la tabla CLIENTES_BORRADOS
, actuando como un archivo de seguridad.
CREATE TRIGGER TR_2_Clientes
ON CLIENTES
FOR DELETE
AS
BEGIN
INSERT INTO CLIENTES_BORRADOS (Id_Cliente, Compañía, Contacto, Ciudad, Teléfono)
SELECT
deleted.Id_Cliente,
deleted.Compañía,
deleted.Contacto,
deleted.Ciudad,
deleted.Teléfono
FROM deleted;
END;
Nota: Se ha renombrado el disparador a TR_2_Clientes
para evitar conflictos con TR_2
de la tabla Pedido
.
Restricciones (Constraints) en SQL
Las restricciones son reglas que se aplican a las columnas de una tabla para limitar el tipo de datos que se pueden ingresar, asegurando la integridad y consistencia de la base de datos.
1. Restricción PRIMARY KEY para 'Matricula'
Define la columna Matricula
como clave primaria en la tabla Alumno_Restricciones
, asegurando que cada valor sea único y no nulo.
ALTER TABLE Alumno_Restricciones
ADD CONSTRAINT Matricula_PK PRIMARY KEY (Matricula);
2. Restricción UNIQUE para 'Celular'
Define una restricción de unicidad en la columna Celular
de la tabla Alumno_Restricciones
, garantizando que no haya valores duplicados.
ALTER TABLE Alumno_Restricciones
ADD CONSTRAINT Celular_UQ UNIQUE (Celular);
3. Restricción FOREIGN KEY para 'Consultorio'
Define una clave foránea en la columna Consultorio
de la tabla Médico
, referenciando la columna Código
de la tabla Paciente
. Esto establece una relación entre ambas tablas.
ALTER TABLE Médico
ADD CONSTRAINT FK_Consultorio FOREIGN KEY (Consultorio) REFERENCES Paciente(Código);
4. Restricción DEFAULT para 'Carrera'
Define un valor predeterminado ('IAS') para la columna Carrera
en la tabla Alumno_Restricciones2
. Si no se especifica un valor al insertar un registro, se asignará 'IAS'.
ALTER TABLE Alumno_Restricciones2
ADD CONSTRAINT DF_Carrera DEFAULT 'IAS' FOR Carrera;
5. Restricción CHECK para 'NombreArt' (No 'Z')
Añade una restricción a la columna NombreArt
en la tabla ARTICULOS_COMPUTACIÓN
para asegurar que los nombres de los artículos no comiencen con la letra 'Z'.
ALTER TABLE ARTICULOS_COMPUTACIÓN
ADD CONSTRAINT CH_NombreArt CHECK (NombreArt NOT LIKE 'Z%');
6. Restricción CHECK para 'PrecioUnitario' (> 40)
Define una restricción en la columna PrecioUnitario
de la tabla ARTICULOS_COMPUTACIÓN
para que solo acepte valores mayores a 40.
ALTER TABLE ARTICULOS_COMPUTACIÓN
ADD CONSTRAINT CH_PrecioUnitario CHECK (PrecioUnitario > 40);
7. Restricción CHECK para 'PrecioMay' (Valores Específicos)
Define una restricción en la columna PrecioMay
de la tabla ARTICULOS_COMPUTACIÓN
para que solo acepte los valores 99, 199, 299 y 399.
ALTER TABLE ARTICULOS_COMPUTACIÓN
ADD CONSTRAINT CH_PrecioMay CHECK (PrecioMay IN (99, 199, 299, 399));
8. Restricción CHECK para 'StockArt' (Rango de Valores)
Define una restricción en la columna StockArt
de la tabla ARTICULOS_COMPUTACIÓN
para que acepte valores entre 0 y 999 (inclusive).
ALTER TABLE ARTICULOS_COMPUTACIÓN
ADD CONSTRAINT CH_StockArt CHECK (StockArt BETWEEN 0 AND 999);
9. Restricción CHECK para 'Fecha_Baja' (Fechas Anteriores)
Agrega una restricción a la columna Fecha_Baja
en la tabla ARTICULOS_COMPUTACIÓN
para que solo acepte fechas anteriores a la fecha actual.
ALTER TABLE ARTICULOS_COMPUTACIÓN
ADD CONSTRAINT CH_Fecha_Baja CHECK (Fecha_Baja < GETDATE());
10. Deshabilitar Restricción
Deshabilita la restricción CH_PrecioMe
en la tabla ARTICULOS_COMPUTACIÓN
. Esto permite insertar o actualizar datos que violarían la restricción sin que se genere un error.
ALTER TABLE ARTICULOS_COMPUTACIÓN
NOCHECK CONSTRAINT CH_PrecioMe;
Nota: La restricción CH_PrecioMe
no fue definida explícitamente en los ejemplos anteriores de este documento. Se mantiene el nombre original del ejemplo.