Skip to content

2. Tutorial de Firebird

Antes de abordar los fundamentos del lenguaje SQL, presentamos al lector cómo instalar Firebird SGBD, así como el cliente gráfico IB-Expert.

2.1. ¿Dónde encontrar Firebird?

La página web principal de Firebird es [http://firebird.sourceforge.net/]. La página de descargas ofrece los siguientes enlaces (abril de 2005):

Image

Se descargarán los siguientes elementos:

firebird-win32
el SGBD para Windows
firebird-net-provider
una biblioteca de clases para aplicaciones .NET que permite acceder a SGBD sin pasar por un controlador ODBC.
firebird-ODBC-driver
el controlador ODBC de Firebird

Instale estos elementos. El SGBD se instala en una carpeta cuyo contenido es similar al siguiente:

Los binarios se encuentran en la carpeta [bin]:

fbguard.exe
permite iniciar/detener el SGBD
isql.exe
cliente de línea que permite gestionar bases de datos

Cabe señalar que, por defecto, el administrador de SGBD se llama [SYSDBA] y su contraseña es [masterkey]. Se han instalado menús en [Démarrer]:

Image

El option [Firebird Guardian] permite iniciar/detener el SGBD. Tras el inicio, el icono del SGBD permanece en la barra de tareas de Windows:

Para crear y utilizar bases de datos Firebird con el cliente de línea [isql.exe], es necesario leer la documentación incluida con el producto en la carpeta [doc].

2.2. La documenta e de Firebird

La documentación sobre Firebird y sobre el lenguaje SQL se puede encontrar en el sitio web de Firebird (enero de 2006):

Image

Hay varios manuales disponibles en inglés:

Firebird 1.5 Quick Start Guide
para empezar con FB
Firebird 1.5 Error Codes
para comprender los códigos de error devueltos por FB

También hay disponibles manuales de formación sobre el lenguaje SQL:

Image

Data Definition Guide
para descubrir cómo crear tablas, qué tipos de datos se pueden utilizar, etc.
Language Reference
la guía de referencia para aprender SQL con Firebird

Una forma rápida de trabajar con Firebird y aprender el lenguaje SQL es utilizar un cliente gráfico. Un ejemplo de este tipo de cliente es IB-Expert, que se describe en el siguiente párrafo.

2.3. Trabajar con SGBD Firebird gracias a IB- Expert

La página web principal de IB-Expert es [http://www.ibexpert.com/]. La página de descargas ofrece los siguientes enlaces:

Image

Elegiremos la versión gratuita version [Personal Edition]. Una vez descargada e instalada, dispondremos de una carpeta similar a la siguiente:

Image

El ejecutable es [ibexpert.exe]. Normalmente hay un acceso directo disponible en el menú [Démarrer]:

Image

Una vez iniciado, IBExpert muestra la siguiente ventana:

Image

Utilicemos option [Database/Create Database] para crear una base de datos:

Server
puede ser [local] o [remote]. En este caso, nuestro servidor está en la misma máquina que [IBExpert]. Por lo tanto, elegimos [local]
Database
utilizar el botón de tipo [dossier] del menú desplegable para designar el archivo de la base de datos. Firebird guarda toda la base de datos en un único archivo. Esta es una de sus ventajas. La base de datos se transfiere de un equipo a otro simplemente copiando el archivo. El sufijo [.gdb] se añade automáticamente.
Username
SYSDBA es el administrador por defecto de las distribuciones actuales de Firebird
Password
masterkey es la contraseña del administrador SYSDBA de las distribuciones actuales de Firebird
Dialect
el dialecto SQL que se va a utilizar
Register Database
si la casilla está marcada, IBExpert mostrará un enlace a la base de datos creada tras haberla creado

Si al hacer clic en el botón de creación [OK] aparece el siguiente aviso:

Image

es que no ha iniciado Firebird. Inícielo. Aparecerá una nueva ventana:

Image

Charset
Familia de caracteres a utilizar. Aunque la captura de pantalla anterior no muestra ninguna información, se recomienda seleccionar en la lista desplegable la familia [ISO-8859-1], que permite utilizar caracteres latinos acentuados.
Server version
[IBExpert] es capaz de gestionar diferentes SGBD derivados de Interbase. Seleccione la version de Firebird que haya instalado:

Una vez validada esta nueva ventana por [Register], obtenemos el siguiente resultado:

Image

Para acceder a la base de datos creada, basta con hacer doble clic en su enlace. IBExpert muestra entonces un árbol que da acceso a las propiedades de la base de datos:

Image

2.4. Creación de una tabla de datos

Creemos una tabla. Hacemos clic con el botón derecho en [Tables] (véase la ventana anterior) y seleccionamos option [New Table]. Aparece la ventana de definición de las propiedades de la tabla:

Empecemos por asignar el nombre [ARTICLES] a la tabla utilizando el campo de entrada [1]:

Utilicemos el campo de entrada [2] para definir una clave primaria [ID]:

Un campo se convierte en clave primaria haciendo doble clic en el campo [PK] (Primary Key) del campo. Añadamos campos con el botón situado encima de [3]:

Image

Mientras no hayamos «compilado» nuestra definición, la tabla no se creará. Utilicemos el botón [Compile] de arriba para finalizar la definición de la tabla. IBExpert prepara las consultas SQL para la generación de la tabla y solicita confirmación:

Image

Curiosamente, IBExpert muestra las consultas SQL que ha ejecutado. Esto permite aprender tanto el lenguaje SQL como el dialecto SQL, que podría ser propietario. El botón [Commit] permite validar la transacción en curso, mientras que [Rollback] la cancela. Aquí la aceptamos mediante [Commit]. Una vez hecho esto, IBExpert añade la tabla creada al árbol de nuestra base de datos:

Image

Al hacer doble clic en la tabla, se accede a sus propiedades:

Image

El panel [Constraints] nos permite añadir nuevas restricciones de integridad a la tabla. Abrámoslo:

Image

Encontramos la restricción de clave primaria que hemos creado. Podemos añadir otras restricciones:

  • claves externas [Foreign Keys]
  • restricciones de integridad de campos [Checks]
  • restricciones de unicidad de campos [Uniques]

Señalemos que:

  • los campos [ID, PRIX, STOCKACTUEL, STOKMINIMUM] deben ser >0
  • El campo [NOM] debe estar rellenado y ser único

Abramos el panel [Checks] y hagamos clic con el botón derecho en su área de definición de restricciones para añadir una nueva restricción:

Image

Definamos las restricciones deseadas:

Image

Cabe señalar que la restricción [NOM<>''] utiliza dos apóstrofos y no comillas. Compilemos estas restricciones con el botón [Compile] de arriba:

Image

Una vez más, IBExpert demuestra su carácter didáctico al indicar las consultas SQL que ha ejecutado. Pasemos ahora al panel [Constraints/Uniques] para indicar que el nombre debe ser único. Esto significa que no puede haber dos nombres iguales en la tabla.

Image

Definamos la restricción:

Image

A continuación, compilémosla. Una vez hecho esto, abramos el panel [DDL] (Data Definition Language) de la tabla [ARTICLES]:

Image

Este proporciona el código SQL para generar la tabla con todas sus restricciones. Podemos guardar este código en un script para volver a ejecutarlo más adelante:

SET SQL DIALECT 3;
SET NAMES NONE;
CREATE TABLE ARTICLES (
    ID            INTEGER NOT NULL,
    NOM           VARCHAR(20) NOT NULL,
    PRIX          DOUBLE PRECISION NOT NULL,
    STOCKACTUEL   INTEGER NOT NULL,
    STOCKMINIMUM  INTEGER NOT NULL
);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_ID check (ID>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_PRIX check (PRIX>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKACTUEL check (STOCKACTUEL>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKMINIMUM check (STOCKMINIMUM>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_NOM check (NOM<>'');
ALTER TABLE ARTICLES ADD CONSTRAINT UNQ_NOM UNIQUE (NOM);
ALTER TABLE ARTICLES ADD CONSTRAINT PK_ARTICLES PRIMARY KEY (ID);

2.5. Inserción de datos en una tabla

Ahora es el momento de introducir datos en la tabla [ARTICLES]. Para ello, utilicemos su panel [Data]:

Image

Los datos se introducen haciendo doble clic en los campos de entrada de cada fila de la tabla. Se añade una nueva línea con el botón [+] y se elimina una línea con el botón [-]. Estas operaciones se realizan en una transacción que se valida con el botón [Commit Transaction] (véase más arriba). Sin esta validación, los datos se perderán.

2.6. El editor SQL de [IB-Expert]

El lenguaje SQL (Structured Query Language) permite al usuario:

  1. crear tablas especificando el tipo de datos que van a almacenar y las restricciones que deben cumplir dichos datos
  2. insertar datos en ellas
  3. modificar algunos de ellos
  4. eliminar otros
  5. explotar su contenido para obtener información
  6. ...

IBExpert permite al usuario realizar las operaciones 1 a 4 de forma gráfica. Acabamos de verlo. Cuando la base de datos contiene numerosas tablas, cada una con cientos de filas, se necesita información que es difícil de obtener visualmente. Supongamos, por ejemplo, que una tienda virtual en Internet tiene miles de compradores al mes. Todas las compras se registran en una base de datos. Al cabo de seis meses, se descubre que un producto «X» es defectuoso. Se desea contactar con todas las personas que lo han comprado para que devuelvan el producto y se les ofrezca un cambio gratuito. ¿Cómo encontrar las direcciones de estos compradores?

  1. Se pueden consultar visualmente todas las tablas y buscar a esos compradores. Esto llevará unas horas.
  2. Se puede emitir una orden SQL que proporcionará la lista de estas personas en unos segundos

El lenguaje SQL resulta útil siempre

  • la cantidad de datos en las tablas es importante
  • cuando hay muchas tablas relacionadas entre sí
  • la información que se desea obtener está repartida en varias tablas
  • ...

A continuación presentamos el editor SQL de IBExpert. Se puede acceder a él a través de option, [Tools/SQL Editor] o [F12]:

Image

De este modo, se accede a un editor de consultas SQL avanzado con el que se pueden realizar consultas. Escribamos una consulta:

Image

Ejecutamos la consulta SQL con el botón [Execute] de arriba. Obtenemos el siguiente resultado:

Image

Arriba, la pestaña [Results] muestra la tabla de resultados de la orden SQL [Select]. Para emitir una nueva orden SQL, basta con volver a la pestaña [Edit]. Entonces se encuentra la orden SQL que se ha ejecutado.

Image

Varios botones de la barra de herramientas resultan útiles:

  • el botón [New Query] permite pasar a una nueva consulta SQL:

Image

A continuación, se obtiene una página de edición en blanco:

Image

A continuación, se puede introducir una nueva orden SQL:

Image

y ejecutarla:

Image

Volvamos a la pestaña [Edit]. Las diferentes órdenes SQL emitidas se memorizan mediante [IB-xpert]. El botón [Previous Query] permite volver a una orden SQL emitida anteriormente:

Image

Se vuelve entonces a la solicitud anterior:

Image

El botón [Next Query] permite, por su parte, pasar a la orden SQL siguiente:

Image

A continuación, encontramos la orden SQL, que sigue en la lista de órdenes SQL memorizadas:

Image

El botón [Delete Query] permite eliminar una orden SQL de la lista de órdenes guardadas:

Image

El botón [Clear Current Query] permite borrar el contenido del editor para la orden SQL mostrada:

Image

El botón [Commit] permite validar definitivamente los cambios realizados en la base de datos:

Image

El botón [RollBack] permite deshacer los cambios realizados en la base de datos desde el último [Commit]. Si no se ha realizado ningún [Commit] desde la conexión a la base de datos, se desharán los cambios realizados desde dicha conexión.

Image

Veamos un ejemplo. Insertemos una nueva línea en la tabla:

Image

Se ejecuta la orden SQL, pero no se produce ninguna visualización. No sabemos si se ha realizado la inserción. Para averiguarlo, ejecutemos la orden SQL tras [New Query]:

Image

Se obtiene el siguiente resultado:

Image

Por lo tanto, la fila se ha insertado correctamente. Examinemos ahora el contenido de la tabla de otra manera. Hagamos doble clic en la tabla [ARTICLES] en el explorador de bases de datos:

Image

Se obtiene la siguiente tabla:

Image

El botón con la flecha de arriba permite actualizar la tabla. Tras la actualización, la tabla de arriba no cambia. Da la impresión de que la nueva línea no se ha insertado. Volvamos al editor SQL (F12) y validemos la orden SQL emitida con el botón [Commit]:

Image

Una vez hecho esto, volvamos a la tabla [ARTICLES]. Podemos observar que nada ha cambiado, incluso utilizando el botón [Refresh]:

Image

A continuación, abramos la pestaña [Fields] y volvamos a la pestaña [Data]. Esta vez, la línea insertada aparece correctamente:

Image

Cuando comienza la emisión de las diferentes órdenes SQL, el editor abre lo que se denomina una transacción en la base de datos. Las modificaciones realizadas por estas órdenes SQL del editor SQL solo serán visibles mientras permanezcamos en el mismo editor SQL (se pueden abrir varios). Todo ocurre como si el editor SQL no trabajara sobre la base real, sino sobre una copia propia. En realidad, no es exactamente así como ocurre, pero esta imagen puede ayudarnos a comprender el concepto de transacción. Todas las modificaciones realizadas en la copia durante una transacción solo serán visibles en la base de datos real cuando hayan sido validadas mediante un [Commit Transaction]. La transacción actual finaliza entonces y comienza una nueva transacción.

Los cambios realizados durante una transacción pueden anularse mediante una operación denominada [Rollback]. Hagamos el siguiente experimento. Iniciemos una nueva transacción (basta con ejecutar [Commit] en la transacción actual) con la orden SQL siguiente:

Image

Ejecutemos esta orden, que elimina todas las líneas de la tabla [ARTICLES], y luego ejecutemos [New Query], la nueva orden SQL siguiente:

Image

Obtenemos el siguiente resultado:

Image

Se han eliminado todas las filas. Recordemos que esto se ha realizado en una copia de la tabla [ARTICLES]. Para comprobarlo, hagamos doble clic en la tabla [ARTICLES] que aparece a continuación:

Image

y veamos la pestaña [Data]:

Image

Incluso si utilizamos el botón [Refresh] o pasamos a la pestaña [Fields] para volver después a la pestaña [Data], el contenido anterior no cambia. Esto ya se ha explicado. Estamos en otra transacción que trabaja con su propia copia. Ahora volvamos al editor SQL (F12) y utilicemos el botón [RollBack] para deshacer las eliminaciones de líneas que se han realizado:

Image

Se nos solicita confirmación:

Image

Confirmemos. El editor SQL confirma que se han deshecho los cambios:

Image

Volvamos a ejecutar la consulta SQL anterior para comprobarlo. Vemos que las líneas que se habían eliminado han vuelto a aparecer:

Image

La operación [Rollback] ha devuelto la copia en la que trabaja el editor SQL al estado en el que se encontraba al inicio de la transacción.