Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Disparadores | Algunos Temas Adicionales
Técnicas Avanzadas en SQL

bookDisparadores

Disparadores en bases de datos son tipos especiales de procedimientos almacenados que se ejecutan automáticamente o se activan en respuesta a ciertos eventos o acciones que ocurren en la base de datos.
Estos eventos pueden incluir inserciones, actualizaciones o eliminaciones de datos en tablas y cambios en objetos del esquema de la base de datos como tablas o vistas.

Nota

Los disparadores no pueden ser invocados explícitamente por los usuarios. En su lugar, se ejecutan automáticamente en respuesta a las operaciones con las que están asociados.

Disparadores DML

Un disparador DML, también conocido como disparador de Lenguaje de Manipulación de Datos, es un objeto de base de datos que ejecuta automáticamente una acción especificada cuando ocurre un determinado evento en una tabla o vista.
Los disparadores DML se utilizan frecuentemente para hacer cumplir reglas de negocio, mantener la integridad de los datos o realizar tareas de auditoría.

Tipos de disparadores DML

  • Disparadores After: Estos disparadores se activan después de que la acción desencadenante (insertar, actualizar, eliminar) se haya ejecutado en la tabla;
  • Disparadores Before: Estos disparadores se activan antes de la acción desencadenante. Permiten interceptar la acción original y ejecutar lógica personalizada antes de decidir si continuar o no con la acción original.

Ejemplo de disparador After

Anteriormente exploramos un ejemplo de uso de una transacción para agregar valores a la tabla BankAccounts y a la tabla UserLogs como una sola unidad lógica en la primera sección de este curso.
Ahora, en lugar de usar una transacción, podemos lograr esto creando un disparador AFTER en la operación INSERT dentro de la tabla BankAccounts.
Como resultado, solo podremos insertar nuevas cuentas, y el valor de registro correspondiente se agregará automáticamente mediante el disparador.

-- Create an after-insert trigger for UserLogs
CREATE FUNCTION after_insert_trigger_function()
RETURNS TRIGGER AS $$
BEGIN
    -- Perform some action, like logging the insert
    INSERT INTO UserLogs (account_number, action)
    VALUES (NEW.account_number, CONCAT('New record inserted for ', NEW.account_holder));
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Attach the trigger to the BankAccounts table
CREATE TRIGGER after_insert_trigger
AFTER INSERT ON BankAccounts
FOR EACH ROW
EXECUTE PROCEDURE after_insert_trigger_function();

Nota

En los disparadores de PostgreSQL, NEW es una variable de registro especial que representa la nueva fila insertada o actualizada en la tabla. Permite acceder a los valores de las columnas en la nueva fila dentro de la función del disparador.
Si trabajamos con filas eliminadas, debemos usar la variable de registro OLD en lugar de NEW.

Ejemplo de disparador Before

Supongamos que queremos impedir agregar valores con un saldo de cuenta negativo. Podemos crear un disparador BEFORE para lograr esto. Este disparador verificará el saldo antes de la operación, y si es negativo, la operación no se realizará.

-- Create the trigger function
CREATE FUNCTION before_insert_trigger_function() RETURNS TRIGGER AS $$
BEGIN
    -- Check if the account balance is less than 0
    IF (NEW.balance < 0) THEN
        -- If balance is less than 0, do nothing and return
        RAISE NOTICE 'Balance is less than 0. Action not logged.';
    ELSE
        -- If balance is greater than or equal to 0, log the action
        RAISE NOTICE 'Logging insert into UserLogs';
        -- Inserting into the UserLogs table
        INSERT INTO UserLogs (account_number, action)
        VALUES (NEW.account_number, CONCAT('Account created for ', NEW.account_holder));
    END IF;

    -- Indicate that the trigger function has completed successfully
    RETURN NULL;
END;
$$ LANGUAGE plpgsql;

-- Create the trigger
CREATE TRIGGER before_insert_trigger
BEFORE INSERT ON BankAccounts
FOR EACH ROW
EXECUTE PROCEDURE before_insert_trigger_function();

Patrón de creación de triggers

Podemos observar el patrón típico para crear triggers: inicialmente, definimos una función para ejecutar una lógica específica antes o después de una operación. Posteriormente, asociamos esta función como un trigger a una tabla y acción designadas.

Tenga en cuenta que en la siguiente instrucción:

CREATE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
EXECUTE PROCEDURE proc_name;

tenemos la flexibilidad de utilizar UPDATE o DELETE en lugar de la operación INSERT.
Pero preste atención a que no podemos crear triggers para SELECT, ya que la instrucción SELECT no modifica ninguna fila en la tabla.

question mark

¿Cuál es el propósito principal de utilizar triggers en una base de datos?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 1

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Awesome!

Completion rate improved to 4.35

bookDisparadores

Desliza para mostrar el menú

Disparadores en bases de datos son tipos especiales de procedimientos almacenados que se ejecutan automáticamente o se activan en respuesta a ciertos eventos o acciones que ocurren en la base de datos.
Estos eventos pueden incluir inserciones, actualizaciones o eliminaciones de datos en tablas y cambios en objetos del esquema de la base de datos como tablas o vistas.

Nota

Los disparadores no pueden ser invocados explícitamente por los usuarios. En su lugar, se ejecutan automáticamente en respuesta a las operaciones con las que están asociados.

Disparadores DML

Un disparador DML, también conocido como disparador de Lenguaje de Manipulación de Datos, es un objeto de base de datos que ejecuta automáticamente una acción especificada cuando ocurre un determinado evento en una tabla o vista.
Los disparadores DML se utilizan frecuentemente para hacer cumplir reglas de negocio, mantener la integridad de los datos o realizar tareas de auditoría.

Tipos de disparadores DML

  • Disparadores After: Estos disparadores se activan después de que la acción desencadenante (insertar, actualizar, eliminar) se haya ejecutado en la tabla;
  • Disparadores Before: Estos disparadores se activan antes de la acción desencadenante. Permiten interceptar la acción original y ejecutar lógica personalizada antes de decidir si continuar o no con la acción original.

Ejemplo de disparador After

Anteriormente exploramos un ejemplo de uso de una transacción para agregar valores a la tabla BankAccounts y a la tabla UserLogs como una sola unidad lógica en la primera sección de este curso.
Ahora, en lugar de usar una transacción, podemos lograr esto creando un disparador AFTER en la operación INSERT dentro de la tabla BankAccounts.
Como resultado, solo podremos insertar nuevas cuentas, y el valor de registro correspondiente se agregará automáticamente mediante el disparador.

-- Create an after-insert trigger for UserLogs
CREATE FUNCTION after_insert_trigger_function()
RETURNS TRIGGER AS $$
BEGIN
    -- Perform some action, like logging the insert
    INSERT INTO UserLogs (account_number, action)
    VALUES (NEW.account_number, CONCAT('New record inserted for ', NEW.account_holder));
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Attach the trigger to the BankAccounts table
CREATE TRIGGER after_insert_trigger
AFTER INSERT ON BankAccounts
FOR EACH ROW
EXECUTE PROCEDURE after_insert_trigger_function();

Nota

En los disparadores de PostgreSQL, NEW es una variable de registro especial que representa la nueva fila insertada o actualizada en la tabla. Permite acceder a los valores de las columnas en la nueva fila dentro de la función del disparador.
Si trabajamos con filas eliminadas, debemos usar la variable de registro OLD en lugar de NEW.

Ejemplo de disparador Before

Supongamos que queremos impedir agregar valores con un saldo de cuenta negativo. Podemos crear un disparador BEFORE para lograr esto. Este disparador verificará el saldo antes de la operación, y si es negativo, la operación no se realizará.

-- Create the trigger function
CREATE FUNCTION before_insert_trigger_function() RETURNS TRIGGER AS $$
BEGIN
    -- Check if the account balance is less than 0
    IF (NEW.balance < 0) THEN
        -- If balance is less than 0, do nothing and return
        RAISE NOTICE 'Balance is less than 0. Action not logged.';
    ELSE
        -- If balance is greater than or equal to 0, log the action
        RAISE NOTICE 'Logging insert into UserLogs';
        -- Inserting into the UserLogs table
        INSERT INTO UserLogs (account_number, action)
        VALUES (NEW.account_number, CONCAT('Account created for ', NEW.account_holder));
    END IF;

    -- Indicate that the trigger function has completed successfully
    RETURN NULL;
END;
$$ LANGUAGE plpgsql;

-- Create the trigger
CREATE TRIGGER before_insert_trigger
BEFORE INSERT ON BankAccounts
FOR EACH ROW
EXECUTE PROCEDURE before_insert_trigger_function();

Patrón de creación de triggers

Podemos observar el patrón típico para crear triggers: inicialmente, definimos una función para ejecutar una lógica específica antes o después de una operación. Posteriormente, asociamos esta función como un trigger a una tabla y acción designadas.

Tenga en cuenta que en la siguiente instrucción:

CREATE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
EXECUTE PROCEDURE proc_name;

tenemos la flexibilidad de utilizar UPDATE o DELETE en lugar de la operación INSERT.
Pero preste atención a que no podemos crear triggers para SELECT, ya que la instrucción SELECT no modifica ninguna fila en la tabla.

question mark

¿Cuál es el propósito principal de utilizar triggers en una base de datos?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 1
some-alt