SQL

Tutorial SQL: Triggers y eventos

SQL triggers: disparadores y uso. Domina la creación y uso de triggers en SQL con ejemplos prácticos y detallados.

Los triggers, o disparadores, son procedimientos almacenados especiales en SQL que se ejecutan automáticamente en respuesta a ciertos eventos en una tabla o vista. Son herramientas clave para mantener la integridad de los datos y automatizar tareas específicas. Los eventos pueden ser acciones como INSERT, UPDATE o DELETE.

Un trigger puede hacer que se ejecute una determinada acción si se intenta borrar una fila, o puede registrar un evento en una tabla de auditoría.

Componentes de un trigger en SQL

Los triggers en SQL constan de tres partes fundamentales:

  • Evento: La acción que activa el trigger, como INSERT, UPDATE o DELETE.
  • Tiempo: Define cuándo debe dispararse el trigger. Puede ser BEFORE (antes), AFTER (después) o INSTEAD OF (en lugar de). BEFORE y AFTER se usan con tablas, mientras que INSTEAD OF se puede usar con vistas.
  • Acción: El bloque de código SQL que se ejecuta como resultado del disparador.

Estructura de trigger en SQL

La sintaxis para declarar triggers varía ligeramente entre diferentes sistemas de gestión de bases de datos SQL, pero la mayoría sigue un formato general que se detalla a continuación:

**CREATE TRIGGER**: Esta es la instrucción que se usa para crear un nuevo trigger. Va seguida del nombre del trigger.

**BEFORE** | **AFTER** | **INSTEAD OF**: Estas palabras clave definen cuándo debe dispararse el trigger. BEFORE y AFTER se usan con tablas, y INSTEAD OF se usa con vistas.

**INSERT** | **UPDATE** | **DELETE**: Definen en qué operación se disparará el trigger. Puede ser en la inserción, actualización o eliminación de una fila en una tabla.

**ON**: Seguido por el nombre de la tabla o vista en la que se activará el trigger.

**FOR EACH ROW**: Indica que el trigger debe activarse para cada fila que se vea afectada por la operación.

**BEGIN**...**END**: Definen el bloque de código SQL que se ejecutará cuando se active el trigger.

**NEW** y **OLD**: Son palabras clave que se utilizan dentro de los triggers para referirse a los valores de la fila antes y después de que se realice la operación. NEW se refiere al estado de la fila después de INSERT o UPDATE, y OLD se refiere al estado de la fila antes de UPDATE o DELETE.

Por ejemplo, aquí está la estructura básica de un trigger en SQL:

CREATE TRIGGER nombre_del_trigger
BEFORE | AFTER | INSTEAD OF INSERT | UPDATE | DELETE
ON nombre_tabla_o_vista
FOR EACH ROW
BEGIN
    -- código SQL
END;

Ejemplo de uso de triggers

Supóngase que se tiene una base de datos de una librería con una tabla Libros y una tabla LibrosVendidos.

CREATE TABLE Libros
(
    LibroID INT PRIMARY KEY,
    Titulo VARCHAR(100),
    Autor VARCHAR(100),
    Cantidad INT
);

CREATE TABLE LibrosVendidos
(
    VentaID INT PRIMARY KEY,
    LibroID INT,
    FechaVenta DATE
);

Supóngase que se quiere mantener actualizado el stock de libros cada vez que se realiza una venta. Para ello, se puede crear un trigger.

CREATE TRIGGER ActualizarStock
AFTER INSERT
ON LibrosVendidos
FOR EACH ROW
BEGIN
   UPDATE Libros
   SET Cantidad = Cantidad - 1
   WHERE LibroID = NEW.LibroID;
END;

En este ejemplo, el trigger ActualizarStock se ejecuta después de cada INSERT en la tabla LibrosVendidos. Lo que hace es actualizar la tabla Libros, restando uno a la cantidad del libro vendido.

De esta manera, cada vez que se inserta un registro en LibrosVendidos, el trigger se dispara automáticamente y actualiza la cantidad del libro correspondiente en la tabla Libros.

Además, es posible que se desee registrar los cambios en otra tabla para auditoría o seguimiento. Esto se puede hacer con otro trigger que se dispare en UPDATE en la tabla Libros.

CREATE TABLE AuditoriaLibros
(
    AuditoriaID INT PRIMARY KEY,
    LibroID INT,
    CantidadAnterior INT,
    CantidadNueva INT,
    FechaCambio DATE
);

CREATE TRIGGER RegistrarCambio
AFTER UPDATE
ON Libros
FOR EACH ROW
BEGIN
   INSERT INTO AuditoriaLibros(LibroID, CantidadAnterior, CantidadNueva, FechaCambio)
   VALUES(OLD.LibroID, OLD.Cantidad, NEW.Cantidad, NOW());
END;

Este trigger RegistrarCambio se dispara después de cada actualización en la tabla Libros. Registra el ID del libro, la cantidad anterior, la nueva cantidad y la fecha del cambio en la tabla AuditoriaLibros.

Precauciones y buenas prácticas con triggers

  • Rendimiento: Un uso excesivo o inadecuado de triggers puede llevar a problemas de rendimiento. Es crucial evaluar el impacto en la eficiencia de las operaciones de la base de datos.
  • Complejidad: Los triggers pueden aumentar la complejidad de la lógica de la base de datos, dificultando su mantenimiento y depuración.
  • Transacciones: Entender cómo los triggers interactúan con las transacciones es fundamental. Los triggers pueden causar efectos secundarios inesperados en operaciones transaccionales, afectando la integridad de los datos.

Uso estratégico de triggers

Los triggers deben usarse estratégicamente y con moderación. Es importante revisar y actualizar regularmente los triggers para asegurarse de que siguen siendo relevantes y no introducen ineficiencias o complejidades innecesarias.

Conclusión

Los triggers en SQL son potentes herramientas para automatizar tareas y garantizar la integridad de los datos. Sin embargo, es vital utilizarlos con prudencia, comprendiendo su impacto en el rendimiento y la lógica de la base de datos. Un buen diseño y una implementación cuidadosa son clave para aprovechar los beneficios de los triggers sin comprometer la eficiencia y la mantenibilidad de la base de datos.

Certifícate en SQL con CertiDevs PLUS

Ejercicios de esta lección Triggers y eventos

Evalúa tus conocimientos de esta lección Triggers y eventos con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Actualización de datos: UPDATE

Código

Creación y uso de procedimientos almacenados

Test

Uso de funciones agregadas: COUNT, SUM, AVG, MAX, MIN

Test

Tipos de datos

Test

Uso de índices y particiones

Test

Uso de vistas

Test

Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN

Test

Sentencias INSERT

Código

Creación y uso de subqueries

Test

Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN

Código

Instalación de MySQL

Test

Relaciones entre tablas

Código

Clasificación de resultados con ORDER BY

Test

Creación y manejo de usuarios y roles

Test

Eliminación de datos: DELETE

Código

Creación y uso de funciones

Test

Vaciar tablas y bases de datos: DROP

Test

Consultas básicas de selección: SELECT y WHERE

Test

Creación de bases de datos y tablas

Código

Filtrado de valores únicos con DISTINCT

Test

Alterar la estructura de tablas existentes: ALTER TABLE

Test

Creación de tablas e inserción de datos con SQL

Proyecto

Asignación y gestión de permisos

Test

Optimización de consultas

Test

Introducción a SQL

Test

Triggers y eventos

Test

Copias de seguridad y restauración de bases de datos

Test

Filtrado de grupos de resultados con HAVING

Test

Eliminación de datos: DELETE

Test

Inserción de datos: INSERT INTO

Test

Instalación de PostgreSQL

Test

Agrupación de resultados con GROUP BY

Test

Actualización de datos: UPDATE

Test

Renombrar tablas y bases de datos: RENAME

Test

Creación de bases de datos y tablas: CREATE DATABASE, CREATE TABLE

Test

Bases de datos y tablas

Test

Consultas básicas de selección SELECT y WHERE

Código

Relaciones entre tablas

Test

Todas las lecciones de SQL

Accede a todas las lecciones de SQL y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción A Sql

Introducción Y Entorno

Sublenguajes De Sql: Data Definition Language Y Data Manipulation Language

Introducción Y Entorno

Instalación De Mysql

Introducción Y Entorno

Instalación De Postgresql

Introducción Y Entorno

Tipos De Datos

Introducción Y Entorno

Bases De Datos Y Tablas

Introducción Y Entorno

Creación De Bases De Datos Y Tablas: Create Database, Create Table

Operaciones Básicas

Consultas Básicas De Selección: Select Y Where

Operaciones Básicas

Inserción De Datos: Insert Into

Operaciones Básicas

Actualización De Datos: Update

Operaciones Básicas

Eliminación De Datos: Delete

Operaciones Básicas

Clasificación De Resultados Con Order By

Filtros Y Clasificación

Filtrado De Valores Únicos Con Distinct

Filtros Y Clasificación

Uso De Funciones Agregadas: Count, Sum, Avg, Max, Min

Funciones Agregadas Y Agrupaciones

Agrupación De Resultados Con Group By

Funciones Agregadas Y Agrupaciones

Filtrado De Grupos De Resultados Con Having

Funciones Agregadas Y Agrupaciones

Relaciones Entre Tablas

Joins Y Subqueries

Uso De Inner Join, Left Join, Right Join, Full Join

Joins Y Subqueries

Creación Y Uso De Subqueries

Joins Y Subqueries

Alterar La Estructura De Tablas Existentes: Alter Table

Manipulación De Tablas Y Datos

Renombrar Tablas Y Bases De Datos: Rename

Manipulación De Tablas Y Datos

Vaciar Tablas Y Bases De Datos: Drop

Manipulación De Tablas Y Datos

Creación Y Uso De Funciones

Funciones Y Procedimientos Almacenados

Creación Y Uso De Procedimientos Almacenados

Funciones Y Procedimientos Almacenados

Creación Y Manejo De Usuarios Y Roles

Seguridad Y Administración De Bases De Datos Sql

Asignación Y Gestión De Permisos

Seguridad Y Administración De Bases De Datos Sql

Copias De Seguridad Y Restauración De Bases De Datos

Seguridad Y Administración De Bases De Datos Sql

Optimización De Consultas

Sintaxis Avanzada

Uso De Índices Y Particiones

Sintaxis Avanzada

Uso De Vistas

Sintaxis Avanzada

Triggers Y Eventos

Sintaxis Avanzada

Certificados de superación de SQL

Supera todos los ejercicios de programación del curso de SQL y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  1. Comprender qué son los triggers en SQL y cómo se activan en respuesta a eventos en una tabla o vista.
  2. Conocer los componentes fundamentales de un trigger: el evento, el tiempo y la acción.
  3. Aprender la sintaxis para crear triggers en SQL, incluyendo la especificación de eventos, tiempo, y la definición de la acción mediante un bloque de código SQL.