Skip to content Skip to navigation

Connexions

You are here: Home » Content » Disparadores en bases de datos relacionales

Navigation

Recently Viewed

This feature requires Javascript to be enabled.
 

Disparadores en bases de datos relacionales

Module by: Miguel-Angel Sicilia. E-mail the author

Summary: Se introduce el concepto de disparador (trigger) en bases de datos relacionales, y la sintaxis SQL para crearlos.

Disparadores en SQL

En ocasiones es necesario mantener restricciones en la base de datos que no pueden expresarse directamente con las sentencias de creación de tablas como CREATE TABLE. Por ejemplo, en una aplicación bancaria, si un cliente se queda sin saldo para un pago en una cuenta (es decir, entra en “números rojos”), se deberá crear automáticamente un crédito personal para el descubierto. Si en la base de datos teníamos una tabla CUENTAS con la información de las cuentas bancarias (incluyendo un atributo saldo), entonces deberíamos “observar” la tabla, y cuando se ejecutase una sentencia UPDATE sobre la misma, habría que comprobar si se cumple la condición saldo<0, en cuyo caso, habría que crear una tupla en la tabla PRESTAMOS. Esta idea de observar cambios es la que se implementa en el concepto de disparador (trigger).

Los disparadores (triggers) son funciones definidas por el diseñador de la base de datos que se ejecutan cuando se producen ciertas operaciones en las bases de datos. Más concretamente, son programas a los que se les da un nombre de objeto en la base de datos, se asocia con una tabla determinada, y se activa cuando ocurre un cierto tipo de evento en esa tabla, como una inserción, actualización o borrado. Si un evento ocurre, el administrador de disparadores dentro del gestor de bases de datos llama a la función adecuada para procesar el evento, por lo que cuando ejecutamos un INSERT, DELETE o UPDATE, es posible que se desencadene la ejecución de disparadores, cosa que hay que tener muy en cuenta al desarrollar y evaluar aplicaciones.

Un primer ejemplo

Pensemos en una aplicación bancaria en la que los CLIENTES tienen CUENTAS y PRESTAMOS. El siguiente diagrama muestra un esquema simplificado para esta base de datos.

Figura 1
Figura 1 (graphics1.png)

Inicialmente, el banco tiene la política de no permitir que un cliente quede en números rojos. Podríamos pensar en crear un disparador para esa tarea.

Un primer ejemplo, mejor pensado

Sintaxis

La sintaxis para la creación de disparadores en SQL es la siguiente:

CREATE TRIGGER nombre

momento evento

ON nombre_tabla FOR EACH [ROW|SENTENCE] sentencia

El nombre del disparador se usará si se desea eliminar el disparador, concretamente, se usa como argumento del comando DROP TRIGGER. El resto de la sintaxis se describe a continuación:

  • La palabra siguiente (momento) determina si la función debe ser llamada antes (BEFORE) o después (AFTER) del evento.
  • El siguiente elemento del comando determina qué eventos dispararán la ejecución (INSERT, DELETE, UPDATE). Es posible especificar múltiples eventos utilizado el operador OR.
  • El nombre de la relación (nombre_tabla) determinará la tabla afectada por el evento. La instrucción FOR EACH determina si el disparador se ejecutará para cada fila afectada o bien antes (o después) de que la secuencia se haya completado.
  • La sentencia es la definición del código que se invocará.

NOTA: En algunos gestores como MySQL 5.1 solo se soportan disparadores que se ejecutan por cada tupla afectada (FOR EACH ROW), pero otros permiten la sintaxis FOR EACH STATEMENT que se ejecutan por sentencia.

Es importante consultar la documentación del gestor de bases de datos para saber exáctamente con qué sentencias se activan los disparadores. Por ejemplo, DROP TABLE en MySQL no utiliza DELETE, por lo que no ejecuta los disparadores asociados a DELETE. Sin embargo,

Una característica importante de los disparadores es que no se puede tener más de uno para una determinada combinación de tabla, evento y momento. Es decir, no se pueden definir dos disparadores sobre la tabla T siendo ambos AFTER INSERT. Esto hace que si hay diferentes acciones a realizar para esa combinación, habrá que programar el disparador para que ejecute condicionalmente unas acciones u otras.

Ejecución encadenada

Si una disparador ejecuta sentencias SQL, entonces estas funciones pueden disparar otros disparadores (o dispararse a sí mismas). A esto se le llama ejecución de disparadores en cascada.

No hay ninguna limitación explicita en cuanto al número de niveles de cascada o encadenamiento. Si un disparador se ejecuta por un INSERT en una tabla T e inserta una nueva tupla en la misma tabla, se invocará de nuevo al mismo disparador (por el nuevo INSERT ejecutado en el código del disparador).

Funciones y procedimientos almacenados

Content actions

Download module as:

PDF | EPUB (?)

What is an EPUB file?

EPUB is an electronic book format that can be read on a variety of mobile devices.

Downloading to a reading device

For detailed instructions on how to download this content's EPUB to your specific device, click the "(?)" link.

| More downloads ...

Add module to:

My Favorites (?)

'My Favorites' is a special kind of lens which you can use to bookmark modules and collections. 'My Favorites' can only be seen by you, and collections saved in 'My Favorites' can remember the last module you were on. You need an account to use 'My Favorites'.

| A lens I own (?)

Definition of a lens

Lenses

A lens is a custom view of the content in the repository. You can think of it as a fancy kind of list that will let you see content through the eyes of organizations and people you trust.

What is in a lens?

Lens makers point to materials (modules and collections), creating a guide that includes their own comments and descriptive tags about the content.

Who can create a lens?

Any individual member, a community, or a respected organization.

What are tags? tag icon

Tags are descriptors added by lens makers to help label content, attaching a vocabulary that is meaningful in the context of the lens.

| External bookmarks