Skip to content

2. Tutorial do Firebird

Antes de abordar os fundamentos da linguagem SQL, apresentamos ao leitor como instalar o Firebird SGBD, bem como o cliente gráfico IB-Expert.

2.1. Onde encontrar o Firebird?

O site principal do Firebird é [http://firebird.sourceforge.net/]. A página de downloads oferece os seguintes links (abril de 2005):

Image

Baixe os seguintes arquivos:

firebird-win32
o SGBD para Windows
firebird-net-provider
uma biblioteca de classes para aplicativos .NET que permite acessar o SGBD sem passar por um driver ODBC.
firebird-ODBC-driver
o driver ODBC do Firebird

Instale esses componentes. O SGBD é instalado em uma pasta cujo conteúdo é semelhante ao seguinte:

Os binários estão na pasta [bin]:

fbguard.exe
permite iniciar/parar o SGBD
isql.exe
cliente de linha que permite gerenciar bancos de dados

Observe que, por padrão, o administrador do SGBD se chama [SYSDBA] e sua senha é [masterkey]. Foram instalados menus no [Démarrer]:

Image

A opção [Firebird Guardian] permite iniciar/encerrar o SGBD. Após o início, o ícone do SGBD permanece na barra de tarefas do Windows:

Para criar e utilizar bancos de dados Firebird com o cliente de linha de comando [isql.exe], é necessário consultar a documentação fornecida com o produto na pasta [doc].

2.2. A documentação do Firebird

A documentação sobre o Firebird e sobre a linguagem SQL pode ser encontrada no site do Firebird (janeiro de 2006):

Image

Estão disponíveis vários manuais em inglês:

Firebird 1.5 Quick Start Guide
para começar a usar o FB
Firebird 1.5 Error Codes
para entender os códigos de erro retornados pelo FB

Também estão disponíveis manuais de treinamento sobre a linguagem SQL:

Image

Data Definition Guide
para descobrir como criar tabelas, quais tipos de dados podem ser utilizados, etc.
Language Reference
o guia de referência para aprender SQL com o Firebird

Uma maneira rápida de trabalhar com o Firebird e aprender a linguagem SQL é usar um cliente gráfico. Um exemplo desse tipo de cliente é o IB-Expert, descrito no parágrafo a seguir.

2.3. Trabalhar com o SGBD Firebird usando o IB- Expert

O site principal do IB-Expert é [http://www.ibexpert.com/]. A página de downloads oferece os seguintes links:

Image

Escolha a versão gratuita [Personal Edition]. Após baixá-la e instalá-la, você terá uma pasta semelhante à seguinte:

Image

O executável é o [ibexpert.exe]. Normalmente, há um atalho disponível no menu [Démarrer]:

Image

Uma vez iniciado, o IBExpert exibe a seguinte janela:

Image

Vamos usar a opção [Database/Create Database] para criar um banco de dados:

Server
pode ser [local] ou [remote]. Aqui, nosso servidor está na mesma máquina que o [IBExpert]. Portanto, escolhemos [local]
Database
utilize o botão do tipo [dossier] na lista suspensa para indicar o arquivo do banco de dados. O Firebird armazena todo o banco de dados em um único arquivo. Essa é uma de suas vantagens. O banco de dados é transferido de um computador para outro simplesmente copiando o arquivo. O sufixo [.gdb] é adicionado automaticamente.
Username
SYSDBA é o administrador padrão das distribuições atuais do Firebird
Password
masterkey é a senha do administrador SYSDBA das distribuições atuais do Firebird
Dialect
o dialeto SQL a ser utilizado
Register Database
se a caixa estiver marcada, IBExpert exibirá um link para o banco de dados criado após sua criação

Se, ao clicar no botão de criação [OK], você receber o seguinte aviso:

Image

isso significa que você não iniciou o Firebird. Inicie-o. Aparece uma nova janela:

Image

Charset
Família de caracteres a ser utilizada. Embora a captura de tela acima não mostre nenhuma informação, é recomendável selecionar na lista suspensa a família [ISO-8859-1], que permite o uso de caracteres latinos acentuados.
Server version
[IBExpert] é capaz de gerenciar diferentes SGBD derivados do Interbase. Selecione a versão do Firebird que você instalou:

Depois que essa nova janela for validada pelo [Register], obtém-se o seguinte resultado:

Image

Para acessar o banco de dados criado, basta clicar duas vezes no link correspondente. O IBExpert exibe então uma árvore de navegação que dá acesso às propriedades do banco de dados:

Image

2.4. Criação de uma tabela de dados

Vamos criar uma tabela. Clique com o botão direito do mouse em [Tables] (veja a janela acima) e selecione a opção [New Table]. Aparece a janela de definição das propriedades da tabela:

Vamos começar atribuindo o nome [ARTICLES] à tabela, utilizando o campo de entrada [1]:

Usemos o campo de entrada [2] para definir uma chave primária [ID]:

Um campo é definido como chave primária ao clicar duas vezes no campo [PK] (Primary Key). Vamos adicionar campos usando o botão localizado acima de [3]:

Image

Enquanto não tivermos “compilado” nossa definição, a tabela não será criada. Vamos usar o botão [Compile] acima para concluir a definição da tabela. IBExpert prepara as consultas SQL para a geração da tabela e solicita confirmação:

Image

Curiosamente, o IBExpert exibe as consultas SQL que executou. Isso permite o aprendizado tanto da linguagem SQL quanto do dialeto SQL, que pode ser proprietário. O botão [Commit] permite confirmar a transação em andamento, enquanto o botão [Rollback] permite cancelá-la. Aqui, aceitamos a transação com [Commit]. Feito isso, IBExpert adiciona a tabela criada à estrutura da nossa base de dados:

Image

Ao clicar duas vezes na tabela, temos acesso às suas propriedades:

Image

O painel [Constraints] permite adicionar novas restrições de integridade à tabela. Vamos abri-lo:

Image

Encontramos a restrição de chave primária que criamos. É possível adicionar outras restrições:

  • chaves estrangeiras [Foreign Keys]
  • restrições de integridade de campos [Checks]
  • restrições de exclusividade de campos [Uniques]

Vale ressaltar que:

  • os campos [ID, PRIX, STOCKACTUEL, STOKMINIMUM] devem ser >0
  • o campo [NOM] deve ser diferente de vazio e único

Vamos abrir o painel [Checks] e clicar com o botão direito do mouse na área de definição de restrições para adicionar uma nova restrição:

Image

Vamos definir as restrições desejadas:

Image

Observe-se acima que a restrição [NOM<>''] utiliza dois apóstrofos e não aspas. Vamos compilar essas restrições com o botão [Compile] acima:

Image

Mais uma vez, a restrição IBExpert demonstra clareza ao indicar as consultas SQL que foram executadas. Passemos agora ao painel [Constraints/Uniques] para indicar que o nome deve ser único. Isso significa que não é possível ter dois nomes iguais na tabela.

Image

Vamos definir a restrição:

Image

Em seguida, vamos compilá-la. Feito isso, abramos o painel [DDL] (Data Definition Language) da tabela [ARTICLES]:

Image

Esse painel fornece o código SQL para a geração da tabela com todas as suas restrições. É possível salvar esse código em um script para executá-lo posteriormente:

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. Inserção de dados em uma tabela

Agora é hora de inserir dados na tabela [ARTICLES]. Para isso, vamos usar seu painel [Data]:

Image

Os dados são inseridos clicando duas vezes nos campos de entrada de cada linha da tabela. Uma nova linha é adicionada com o botão [+], e uma linha é excluída com o botão [-]. Essas operações são realizadas em uma transação que é validada pelo botão [Commit Transaction] (veja acima). Sem essa validação, os dados serão perdidos.

2.6. O editor SQL de [IB-Expert]

A linguagem SQL (Structured Query Language) permite que um usuário:

  1. criar tabelas, especificando o tipo de dados que elas armazenarão e as restrições que esses dados devem cumprir
  1. inserir dados nelas
  2. modificar alguns dados
  3. excluir outras
  4. explorar o conteúdo para obter informações
  5. ...

O IBExpert permite que um usuário realize as operações de 1 a 4 de forma gráfica. Acabamos de ver isso. Quando o banco de dados contém muitas tabelas, cada uma com centenas de linhas, precisamos de informações difíceis de obter visualmente. Suponhamos, por exemplo, que uma loja virtual na internet tenha milhares de compradores por mês. Todas as compras são registradas em um banco de dados. Após seis meses, descobre-se que um produto “X” apresenta defeito. Deseja-se entrar em contato com todas as pessoas que o compraram para que devolvam o produto para uma troca gratuita. Como encontrar os endereços desses compradores?

  1. É possível consultar visualmente todas as tabelas e procurar esses compradores. Isso levará algumas horas.
  2. É possível emitir uma ordem SQL que fornecerá a lista dessas pessoas em poucos segundos

A linguagem SQL é útil sempre que

  • quando a quantidade de dados nas tabelas é grande
  • quando há muitas tabelas interligadas
  • quando as informações a serem obtidas estão distribuídas por várias tabelas
  • ...

Apresentamos agora o editor SQL do IBExpert. Ele pode ser acessado por meio da opção [Tools/SQL Editor] ou [F12]:

Image

Assim, temos acesso a um editor avançado de consultas SQL, com o qual podemos testar consultas. Digitemos uma consulta:

Image

Executamos a consulta SQL usando o botão [Execute] acima. Obtemos o seguinte resultado:

Image

Acima, a aba [Results] apresenta a tabela de resultados da ordem SQL [Select]. Para emitir um novo comando SQL, basta voltar à aba [Edit]. Encontramos então a ordem SQL, que já foi executada.

Image

Vários botões da barra de ferramentas são úteis:

  • o botão [New Query] permite passar para uma nova consulta SQL:

Image

Assim, obtém-se uma página de edição em branco:

Image

É possível, então, digitar um novo comando SQL:

Image

e executá-lo:

Image

Voltemos à aba [Edit]. As diferentes ordens SQL emitidas são memorizadas por [IB-xpert]. O botão [Previous Query] permite retornar a uma ordem SQL emitida anteriormente:

Image

Retorna-se, então, à consulta anterior:

Image

O botão [Next Query] permite, por sua vez, avançar para a ordem seguinte, SQL:

Image

Encontramos, então, a ordem SQL, que vem a seguir na lista de ordens SQL armazenadas:

Image

O botão [Delete Query] permite excluir uma ordem SQL da lista de ordens armazenadas:

Image

O botão [Clear Current Query] permite limpar o conteúdo do editor para a ordem SQL exibida:

Image

O botão [Commit] permite confirmar definitivamente as alterações feitas no banco de dados:

Image

O botão [RollBack] permite desfazer as alterações feitas no banco de dados desde a última execução do [Commit]. Se nenhum [Commit] tiver sido executado desde a conexão com o banco de dados, serão desfeitas as alterações feitas a partir dessa conexão.

Image

Vejamos um exemplo. Vamos inserir uma nova linha na tabela:

Image

O comando SQL é executado, mas nada é exibido. Não sabemos se a inserção ocorreu. Para descobrir, vamos executar o comando SQL, que se segue ao [New Query]:

Image

O resultado obtido com o [Execute] é o seguinte:

Image

Portanto, a linha foi inserida corretamente. Vamos agora examinar o conteúdo da tabela de outra maneira. Clique duas vezes na tabela [ARTICLES] no explorador de bancos de dados:

Image

Obtemos a seguinte tabela:

Image

O botão com seta acima permite atualizar a tabela. Após a atualização, a tabela acima não sofre alterações. Parece que a nova linha não foi inserida. Voltemos ao editor SQL (F12) e, em seguida, confirmemos a ordem SQL emitida com o botão [Commit]:

Image

Feito isso, voltemos à tabela [ARTICLES]. Podemos constatar que nada mudou, mesmo ao usar o botão [Refresh]:

Image

Acima, vamos abrir a aba [Fields] e, em seguida, voltar à aba [Data]. Desta vez, a linha inserida aparece corretamente:

Image

Quando começa a execução dos diversos comandos SQL, o editor abre o que chamamos de transação no banco de dados. As modificações feitas por essas ordens SQL do editor SQL só ficarão visíveis enquanto permanecermos no mesmo editor SQL (é possível abrir vários). É como se o editor SQL estivesse trabalhando não no banco de dados real, mas em uma cópia própria. Na realidade, não é exatamente assim que isso ocorre, mas essa imagem pode nos ajudar a compreender o conceito de transação. Todas as alterações feitas na cópia durante uma transação só ficarão visíveis no banco de dados real depois de serem validadas por um [Commit Transaction]. A transação atual é então encerrada e uma nova transação começa.

As modificações feitas durante uma transação podem ser revertidas por meio de uma operação chamada [Rollback]. Vamos fazer o seguinte experimento. Iniciemos uma nova transação (basta executar o [Commit] na transação atual) com o comando SQL a seguir:

Image

Vamos executar essa ordem, que exclui todas as linhas da tabela [ARTICLES], e, em seguida, executar [New Query], a nova ordem SQL a seguir:

Image

Obtemos o seguinte resultado:

Image

Todas as linhas foram excluídas. Vale lembrar que isso foi feito em uma cópia da tabela [ARTICLES]. Para verificar, cliquemos duas vezes na tabela [ARTICLES] abaixo:

Image

e vamos visualizar a aba [Data]:

Image

Mesmo ao usar o botão [Refresh] ou ao alternar para a aba [Fields] e, em seguida, voltar para a aba [Data], o conteúdo acima permanece inalterado. Isso já foi explicado. Estamos em outra transação que trabalha com sua própria cópia. Agora, voltemos ao editor SQL (F12) e usemos o botão [RollBack] para desfazer as exclusões de linhas que foram feitas:

Image

É solicitada uma confirmação:

Image

Vamos confirmar. O editor SQL confirma que as alterações foram revertidas:

Image

Vamos executar novamente a consulta SQL acima para verificar. Encontramos as linhas que haviam sido excluídas:

Image

A operação [Rollback] restaurou a cópia na qual o editor SQL está trabalhando, ao estado em que se encontrava no início da transação.