Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Disparadores | Algunos Temas Adicionales
Quizzes & Challenges
Quizzes
Challenges
/
Optimización de SQL y Características de Consulta

bookDisparadores

Triggers 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.

Triggers DML

Un trigger DML, también conocido como trigger 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 triggers DML se utilizan frecuentemente para hacer cumplir reglas de negocio, mantener la integridad de los datos o realizar tareas de auditoría.

Tipos de triggers DML

  • After Triggers: Estos triggers se activan después de que la acción desencadenante (insertar, actualizar, eliminar) ha sido ejecutada en la tabla;
  • Before Triggers: Estos triggers 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 after trigger

Anteriormente exploramos un ejemplo de uso de una transacción para agregar valores a la tabla BankAccounts y 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 trigger 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 trigger.

12345678910111213141516
-- 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();
copy
Note
Nota

En los triggers 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 trigger.
Si trabajamos con filas eliminadas, debemos usar la variable de registro OLD en lugar de NEW.

Ejemplo de trigger BEFORE

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

12345678910111213141516171819202122232425
-- 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();
copy

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 sentencia 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.55

bookDisparadores

Desliza para mostrar el menú

Triggers 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.

Triggers DML

Un trigger DML, también conocido como trigger 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 triggers DML se utilizan frecuentemente para hacer cumplir reglas de negocio, mantener la integridad de los datos o realizar tareas de auditoría.

Tipos de triggers DML

  • After Triggers: Estos triggers se activan después de que la acción desencadenante (insertar, actualizar, eliminar) ha sido ejecutada en la tabla;
  • Before Triggers: Estos triggers 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 after trigger

Anteriormente exploramos un ejemplo de uso de una transacción para agregar valores a la tabla BankAccounts y 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 trigger 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 trigger.

12345678910111213141516
-- 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();
copy
Note
Nota

En los triggers 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 trigger.
Si trabajamos con filas eliminadas, debemos usar la variable de registro OLD en lugar de NEW.

Ejemplo de trigger BEFORE

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

12345678910111213141516171819202122232425
-- 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();
copy

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 sentencia 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