0% encontró este documento útil (0 votos)
193 vistas6 páginas

Qué es un Trigger en SQL

Un TRIGGER SQL es un script que se ejecuta automáticamente en respuesta a eventos como inserciones, actualizaciones o eliminaciones en una base de datos. Los TRIGGERS permiten automatizar tareas como duplicar datos en otra tabla o actualizar campos cuando cambia la información. Se crean usando sentencias CREATE TRIGGER y pueden acceder a los datos antiguos y nuevos a través de las variables OLD y NEW.

Cargado por

Nacho COrtiz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
193 vistas6 páginas

Qué es un Trigger en SQL

Un TRIGGER SQL es un script que se ejecuta automáticamente en respuesta a eventos como inserciones, actualizaciones o eliminaciones en una base de datos. Los TRIGGERS permiten automatizar tareas como duplicar datos en otra tabla o actualizar campos cuando cambia la información. Se crean usando sentencias CREATE TRIGGER y pueden acceder a los datos antiguos y nuevos a través de las variables OLD y NEW.

Cargado por

Nacho COrtiz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Marco Teórico

¿Qué es un TRIGGER SQL?


Un TRIGGER, también conocido como disparador, es una especie de script de
programación SQL para base de datos. Los TRIGGER son procedimientos que se
ejecutarán según nuestras indicaciones cuando se realicen operaciones sobre la
información de la base de datos. Estas operaciones pueden ser de actualización
(UPDATE), inserción (INSERT) y borrado (DELETE).

Los TRIGGER además pueden modificar la información de la base de datos e incluso


detener la ejecución de consultas erróneas. 

¿Para qué sirve un TRIGGER SQL?

Los TRIGGERS son una de las funcionalidades más útiles de las que
disponemos cuando diseñamos y mantenemos bases de datos. Gracias a ellos podremos
implementar ciertas características de nuestra base de datos sin necesidad de desarrollar
programación en otros lenguajes externos. 

Imagínate por ejemplo que quieres duplicar en una segunda tabla toda la información
que se inserte en otra. No existe ninguna forma de indicarle a la base de datos que lo
realice de forma automática. Sin embargo, gracias a un TRIGGER que se ejecute tras un
INSERT, podemos insertar esa información en la segunda tabla, todo esto sin que el
usuario/programador que lanzó el INSERT tenga que hacer nada.

¿Como crear un TRIGGER SQL?

Crear un TRIGGER con SQL es sencillo, casi todos los sistemas de bases de datos
(SGBD) están preparados para ello, e incluso algunos pueden incorporar un
asistente que nos guie en el proceso.

Estructura de un trigger

La creación de un TRIGGER sigue las bases de crear un procedimiento almacenado o


una función almacenada. Primero declaramos un delimitador y usamos la sentencia
CREATE:

CREATE TRIGGER trigger histórico


En estas líneas SQL he creado un TRIGGER con el nombre trigger_historico. Este
nombre me servirá después para identificarlo, pudiendo así borrarlo o buscarlo en la
base de datos.

A continuación, debemos indicar cuando debe ejecutarse el TRIGGER. Las


indicaciones posibles en este punto son AFTER o BEFORE para indicar si el disparador
se ejecutará antes o después de la orden lanzada por el usuario. Estas órdenes
serán: INSERT, DELETE o UPDATE. Por último, indicaremos sobre que tabla actuará.

Vamos a completar el código anterior indicando que la ejecución será tras un


INSERT en la tabla usuario:

CREATE trigger_historico

AFTER INSERT ON usuario

FOR EACH ROW

Como se puede ver se añadido las dos últimas líneas: la primera indica que la ejecución
será tras una inserción en la tabla usuario, mientras que la segunda forma parte de
la estructura de un TRIGGER e indica que se debe aplicar a cada fila insertada.

Por último, mediante el comando BEGIN y END indicamos las líneas de código SQL


que ejecutará el TRIGGER:

CREATE trigger_historico

AFTER INSERT ON usuario

FOR EACH ROW

BEGIN

// líneas de código SQL que se ejecutarán

END

Datos nuevos y antiguos. El OLD y el NEW

Para que nuestras líneas de código SQL puedan acceder a la información que interviene
en el TRIGGER, es decir, la información a la que afecta un UPDATE, INSERT o
DELETE, disponemos de dos variables especiales NEW y OLD.
La variable NEW de un TRIGGER

NEW es la variable que almacena la nueva información que aporta la consulta a la base
de datos, es decir, cada una de las filas que intervienen en un INSERT O UPDATE. Si
por ejemplo se ha realizado un INSERT, gracias a NEW podremos acceder a los datos
introducidos para cada columna de la tabla. [Link] por ejemplo almacena la
información de la columna nombre que tendrá el nuevo registro insertado en la tabla. 

Hay que tener en cuenta que NEW no estará disponible en todos los tipos de TRIGGER.
En concreto los TRIGGER relacionados con un DELETE no dispondrán de información
en esta variable ya que tan solo tendremos información antigua que es eliminada.

La variable OLD de un TRIGGER

OLD es la variable que almacena la información antigua relacionada con la consulta que
ejecuta el TRIGGER, esta información la componen las filas que van a ser borradas o
modificadas. En un DELETE, por ejemplo, OLD tendrá la información de todas las
columnas de los registros borrados.

Al igual que NEW no está disponible para todos los TRIGGER que creemos, la variable
OLD no podrá ser utilizada para un INSERT, ya que en este tan solo existe nueva
información que va a ser insertada en la base de datos.

Predicados condicionales

Cuando se crea un trigger para más de una operación DML, se puede utilizar un
predicado condicional en las sentencias que componen el trigger que indique que tipo de
operación o sentencia ha disparado el trigger. Estos predicados condicionales son los
siguientes:

 Inserting: Retorna true cuando el trigger ha sido disparado por un INSERT


 Deleting: Retorna true cuando el trigger ha sido disparado por un DELETE
 Updating: Retorna true cuando el trigger ha sido disparado por un UPDATE
 Updating (columna): Retorna true cuando el trigger ha sido disparado por
un UPDATE y la columna ha sido modificada.
Tipos de Triggers

Los triggers pueden definirse para las operaciones INSERT, DELETE o UPDATE, y


pueden dispararse antes o después de la operación. Finalmente, el nivel de los
disparadores puede ser la fila o registro o la orden.

El modificador BEFORE o AFTER indica que el trigger se ejecutará antes o después de


ejecutarse la sentencia SQL definida por DELETE, INSERT o UPDATE. Si incluimos
el modificador OF el trigger solo se ejecutará cuando la sentencia SQL afecte a los
campos incluidos en la lista.

El alcance de los disparadores puede ser la fila o de orden. El modificador FOR EACH


ROW indica que el trigger se disparará cada vez que se realizan operaciones sobre cada
fila de la tabla. Si se acompaña del modificador WHEN, se establece una restricción; el
trigger solo actuará, sobre las filas que satisfagan la restricción.

Ejemplo1 de un TRIGGER

Vamos a resolver un TRIGGER que nos permita mantener una copia de todos los
clientes que se inserten en una base de datos de una tienda online. Para esto tendremos
dos tablas: cliente y cliente_historico. Así, el siguiente TRIGGER insertará toda la
información del cliente (nombre, dni, direccion) más una columna extra: fecha_registro.

CREATE TRIGGER trigger_cliente_historico

AFTER INSERT ON cliente

FOR EACH ROW

BEGIN

INSERT INTO cliente_historico (nombre, dni, direccion)

VALUES ([Link], [Link], [Link], CURDATE ());

END

Ejemplo2 de un TRIGGER

El siguiente trigger insertara un valor nuevo en un campo único identificador tras una
actualización de datos en la tabla usuario_web.
CREATE TRIGGER trigger_usuario_identificador

AFTER INSERT ON usuario

FOR EACH ROW

BEGIN

UPDATE usuario SET identificador=CONCAT([Link],'_',[Link],


'_',[Link])

WHERE id=[Link];

END

REFERENCIAS

[Link]

[Link]
%C3%B3n,o%20DELETE%20)%20sobre%20dicha%20tabla.

También podría gustarte