En este tema, aprenderás a usar de forma adecuada los triggers o “disparadores”, cuya función consiste en ejecutar acciones de manera automática dependiendo de los eventos que se presenten en una base de datos. Lo anterior ayuda a realizar diversos tipos de acciones para llevar a cabo actividades, tareas o rutinas específicas de acuerdo con lo que se requiera, ya sea por parte de la propia base de datos o de los usuarios. Sabrás cómo crearlos y gestionarlos a través del uso de PL/SQL mediante una definición adecuada de código que ayude a trabajar con variables y procedimientos previamente almacenados en PL/SQL. También revisarás algunos ejemplos prácticos de su utilización para automatizar tareas y mejorar el rendimiento de las bases de datos que se hayan definido a través de SQL.

Explicación

¿Qué son los trigger?

Los triggers son estructuras de bloques y programas predefinidos llamados de manera automática cuando se presenta algún evento. Se almacenan en las bases de datos y se invocan automáticamente en escenarios particulares (Geeksforgeeks, 2024).

Un trigger en PLSQL se entiende como un tipo especial de procedimiento almacenado en la base de datos que se “dispara” (triggered) cada vez que las sentencias INSERT, UPDATE o DELETE se ejecutan sobre dicha tabla, es decir, el procedimiento no está limitado a la realización de una sola operación, sino que pueden realizarse varias de ellas y desde formatos diferentes, dependiendo de si un registro es creado, actualizado o eliminado de una tabla de la base de datos (PL/SQL, 2021). Algunas de las circunstancias en que puede ser de mucha utilidad el uso de un trigger son las siguientes, de acuerdo con PL/SQL (2021):

  • Cuando se necesitan duplicar contenidos de una tabla de forma automática y en tiempo real.
  • Cuando se desean implementar restricciones complejas sobre los valores que pueden tomar los campos en una tabla, en otras palabras, cuando se han definido previamente CONSTRAINTS insuficientes.
  • Cuando se quieren controlar las modificaciones de los valores almacenados en una tabla, algo de utilidad en las auditorías de sistemas.
  • Cuando se desean incrementar de forma automática los valores de algún campo.
  • Cuando se requieren actualizaciones masivas en una tabla (en cascada).
  • Cuando se necesitan modificar campos o registros en una tabla y el usuario no puede hacerlo de manera directa.

Los triggers se consideran una herramienta de mucha utilidad para mantener la integridad de las bases de datos, esto debido a que pueden llevar a cabo cualquier acción que se requiera para que dicha integridad sea permanente. Además, son capaces de llamar a otros procedimientos que, a su vez, disparan otros triggers. Sin embargo, no admiten parámetros y tampoco pueden ser invocados desde otros procedimientos PL/SQL. Se almacenan en la tabla catálogo del sistema como una propiedad de la tabla.

Se presenta a continuación un ejemplo del uso de triggers en una empresa que cuenta con un sistema de inventarios en el cual los usuarios registran las entradas y salidas de productos. Se requiere que los inventarios estén siempre actualizados sin errores humanos, por lo que, en este caso, un trigger ayudaría a realizar esta actividad de manera segura. En las siguientes tablas, se aprecia la venta de tres unidades y el trigger actualiza las existencias de los productos de forma automática.

Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

De esta manera, con la ejecución del trigger, cada vez que se lleve a cabo una salida de un producto del almacén, se actualizarán de manera automática los productos disponibles en la base de datos, garantizando el contar con inventarios en tiempo real y así evitar ventas de productos que no estén disponibles y que podrían traer consecuencias de inconsistencias e insatisfacción de los clientes.

¿En qué pueden apoyar los trigger?

Los trigger se pueden programar para alertar al departamento de compras cuando algún producto esté por agotarse, permitiendo realizar los pedidos necesarios con tiempo para contar con inventarios suficientes. Según Geeksforgeeks (2024), los triggers o desencadenantes son importantes por las siguientes razones:

  • Acción automatizada. Permiten la automatización de ciertas acciones como respuesta a eventos de una tabla o de alguna vista.
  • Integridad de los datos. Ayudan a garantizar la integridad referencial por medio de restricciones a los datos.
  • Consistencia. A través de la respuesta a eventos específicos, mantienen la coherencia de la base de datos.
  • Manejo de errores. Permiten el manejo de errores respondiendo a los mismos, por ejemplo, en caso de no cumplirse una condición específica, se mostrará un mensaje de error.

Algunas ventajas del uso de triggers PL/SQL en la gestión de bases de datos son los siguientes (PL/SQL, 2021):

  • Estandarización. Porque cuentan con un solo procedimiento que controla las acciones que pueden realizar los demás procedimientos referents a una tabla específica.
  • Eficiencia. Permiten la optimización de memoria, por ejemplo, cuando un trigger es analizado por el optimizador, el plan de ejecución se guardará en la memoria virtual del servidor, de tal manera que, si se vuelve a disparar, se podrá ejecutar de manera instántanea porque estará almacenada una copia de dicho plan de ejecución en la memoria.
  • Seguridad. Esto es posible porque aumenta la seguridad a través de la restricción de acceso de usuarios a los datos de las tablas y, por ello, no pueden modificar o acceder a los mismos de manera directa. Las acciones de un trigger están limitadas según los permisos que tiene el usuario que creó la tabla a la que se está accediendo y no dependen de los permisos asignados al usuario que disparó el trigger.

Los triggers se disparan antes o después de que se lleve a cabo una creación, borrado o actualización de un registro en una tabla. Se pueden definir los que se requieran para cada tipo de evento (INSERT, UPDATE, DELETE). Sin embargo, la mejor práctica consiste en crear un trigger único para todos los eventos y, a través del uso de la sentencia IF, aplicar las reglas que permitan decidir cuál será la acción por realizarse dependiendo del evento.

Existen dos tipos de trigger de acuerdo con el nivel en que se ejecuta:

  • Trigger a nivel de registro o fila. Se ejecutará cada vez que un registro es actualizado, insertado o borrado. Por ejemplo, emplear un trigger para asegurar que, cada vez que se inserta una nueva fila en la tabla, automáticamente se llene un campo determinado.
  • Trigger a nivel de sentencia. Se ejecutará una vez que la sentencia PL/SQL INSERTUPDATE o INSERT se lleve a cabo; en este caso, el trigger solamente podrá ser ejecutado después (AFTER) de que se ejecute dicha sentencia.

Cómo crear y utilizar triggers

Para comenzar con la realización de triggers, se necesita una base de datos MySQL y, por lo menos, una tabla donde se puedan realizar consultas. El primer paso será la definición, para lo cual se escogerá un nombre que lo identifique y así lograr encontrarlo fácilmente cuando se necesite dentro de la base de datos.

Antes de escribir la instrucción CREATE, es importante declarar un delimitador como el siguiente:

DELIMITER $$

CREATE TRIGER nombre_trigger

El segundo paso consiste en definir cuándo se ejecutará, por lo que existen dos opciones: AFTER o BEFORE (en ese orden). AFTER indica que el trigger se activará después de ejecutar la instrucción y BEFORE que el trigger se detonará antes de la ejecución de la instrucción. Considera que las órdenes que aceptan los triggers son INSERT, DELETE y UPDATE.

DELIMITER $$

CREATE TRIGGER nombre_trigger

AFTER INSERT ON nombre_tabla

Posteriormente, se debe especificar la estructura del trigger, es decir, en donde se aplicarán los cambios que se requieren. En este caso, se realizará para todas las filas (FOR EACH ROW):

DELIMITER $$

CREATE TRIGGER nombre_trigger

AFTER INSERT ON nombre_tabla

FOR EACH ROW

Finalmente, se introducen las líneas de código SQL que se quieren ejecutar, entre BEGIN y END. Recuerda que se debe cerrar el delimitador definido al comienzo.

DELIMITER $$

CREATE TRIGGER nombre_trigger

AFTER INSERT ON nombre_tabla

FOR EACH ROW

BEGIN

//Instrucciones SQL

END;$$

Con este código, después de un INSERT en nombre_tabla, se ejecutarán las instrucciones declaradas dentro del BEGIN.

Ejemplo práctico

Se desea crear una tabla llamada “ventas_mensuales”, la cual tiene las siguientes columnas:

  • Id (clave primaria)
  • Producto
  • Fecha
  • Monto

Se necesita agregar un trigger que se active después de cada inserción de un registro en la tabla y que, adicionalmente, actualice el valor de la columna “Total” en otra tabla llamada “Ventas_totales”. Para lograrlo, tendrías que llevar a cabo los siguientes pasos:

  1. Creación de la tabla “ventas_mensuales”.

Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

  1. Creación de la tabla “ventas_totales”.

Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

  1. En este paso, se creará el trigger que se activará después de cada inserción en la tabla “ventas_mensuales”.

Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Observa que el trigger se llama “Actualizar_totales” y se activa después de cada inserción en la tabla “Ventas_mensuales”, es decir, se ejecuta una vez por cada fila insertada; esta instrucción la especifica el siguiente código: FOR EACH ROW. También se actualiza la columna “total” en la tabla “Ventas_totales”, sumando el valor de la columna “monto” en la fila recién insertada que se denomina NEW.monto.

Puedes hacer una prueba insertando una fila en la tabla “ventas_mensuales”, como se ve en la siguiente imagen.

Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Después de realizar esta inserción, la tabla “ventas_totales” debe tener un valor de 100.00 en la columna "total".

Para la implementación de cualquier trigger, debes considerar realizar pruebas previas y asegurarte de que funcionen de manera correcta, sin problemas en su ejecución o con la base de datos. Se recomienda documentar dichas pruebas de manera debida para facilitar su mantenimiento posterior.

Cierre

Los triggers se consideran una herramienta muy útil para automatizar tareas, realizar la validación de los datos en las tablas y asegurar la integridad de una base de datos. Para usarlos de manera adecuada, se debe contar con conocimientos amplios de sus funciones, código, impacto en tiempo real en las tablas y sobre la lógica de la estructura de la base de datos para atender de manera confiable todas las necesidades de información de la empresa.

La actualización constante en tendencias y avances en la creación de triggers es un aspecto importante para todo administrador de bases de datos, ya que se vuelve la única manera de poder ofrecer soluciones eficientes para los departamentos que realizan análisis de información de alto nivel con el fin de asegurar el logro de sus objetivos y contar con ventajas competitivas en los mercados que constantemente evolucionan.

Checkpoint

Asegúrate de:

  • Comprender todas las ventajas asociadas a la creación de los triggers para las bases de datos.
  • Aplicar la sintaxis de un trigger de manera correcta para lograr acciones con integridad de datos en las bases de datos.
  • Entender que la implementación de los triggers debe emplearse en contextos adecuados.

Referencias bibliográficas

  • Geeksforgeeks. (2024). PL/SQL Triggers. Recuperado de https://www.geeksforgeeks.org/plsql-triggers/
  • PL/SQL. (2021). Triggers en PL/SQL. Recuperado de https://www.plsql.biz/2007/02/triggers-en-plsql.html

Tecmilenio no guarda relación alguna con las marcas mencionadas como ejemplo. Las marcas son propiedad de sus titulares conforme a la legislación aplicable, estas se utilizan con fines académicos y didácticos, por lo que no existen fines de lucro, relación publicitaria o de patrocinio.

Los siguientes enlaces son externos a la Universidad Tecmilenio, al acceder a ellos considera que debes apegarte a sus términos y condiciones.

Lecturas

Videos

Tecmilenio no guarda relación alguna con las marcas mencionadas como ejemplo. Las marcas son propiedad de sus titulares conforme a la legislación aplicable, estas se utilizan con fines académicos y didácticos, por lo que no existen fines de lucro, relación publicitaria o de patrocinio.