Skip to content

2. Firebird-Tutorial

Bevor wir auf die Grundlagen der SQL-Sprache eingehen, zeigen wir dem Leser, wie man das Firebird-DBMS sowie den grafischen Client IB-Expert installiert.

2.1. Wo findet man Firebird?

Die offizielle Firebird-Website lautet [http://firebird.sourceforge.net/]. Die Download-Seite bietet folgende Links (Stand: April 2005):

Image

Sie laden folgende Dateien herunter:

firebird-win32
das DBMS für Windows
firebird-net-provider
eine Klassenbibliothek für .NET-Anwendungen, die den Zugriff auf das DBMS ohne Verwendung eines ODBC-Treibers ermöglicht.
firebird-ODBC-Treiber
der Firebird-ODBC-Treiber

Installieren Sie diese Komponenten. Das DBMS wird in einem Ordner installiert, dessen Inhalt in etwa wie folgt aussieht:

Die Binärdateien befinden sich im Ordner [bin]:

fbguard.exe
ermöglicht es Ihnen, das DBMS zu starten/zu stoppen
isql.exe
Befehlszeilen-Client zur Verwaltung von Datenbanken

Beachten Sie, dass der DBMS-Administrator standardmäßig [SYSDBA] heißt und das Passwort [masterkey] lautet. Unter [Start] wurden Menüs hinzugefügt:

Image

Über die Option [Firebird Guardian] können Sie das DBMS starten/beenden. Nach dem Start bleibt das DBMS-Symbol in der Windows-Taskleiste:

Um Firebird-Datenbanken mit dem Befehlszeilen-Client [isql.exe] zu erstellen und zu verwalten, müssen Sie die im Ordner [doc] enthaltene Dokumentation lesen.

2.2. Firebird-Dokumentations-

Dokumentation zu Firebird und der Sprache SQL finden Sie auf der Firebird-Website (Januar 2006):

Image

Es sind verschiedene Handbücher in englischer Sprache verfügbar:

Firebird 1.5 – Schnellstartanleitung
Erste Schritte mit FB
Firebird 1.5 Fehlercodes
Um die von FB zurückgegebenen Fehlercodes zu verstehen

Es sind auch SQL-Schulungshandbücher verfügbar:

Image

Leitfaden zur Datendefinition
um zu erfahren, wie man Tabellen erstellt, welche Datentypen verfügbar sind, ...
Sprachreferenz
das Nachschlagewerk zum Erlernen von SQL mit Firebird

Eine schnelle Möglichkeit, mit Firebird zu arbeiten und SQL zu erlernen, ist die Verwendung eines grafischen Clients. Ein solcher Client ist IB-Expert, der im folgenden Abschnitt beschrieben wird.

2.3. Arbeiten mit dem Firebird-DBMS unter Verwendung von IB- Expert

Die Hauptwebsite von IB-Expert ist [http://www.ibexpert.com/]. Die Download-Seite bietet die folgenden Links:

Image

Wählen Sie die kostenlose Version [Personal Edition]. Nach dem Herunterladen und der Installation verfügen Sie über einen Ordner, der in etwa wie folgt aussieht:

Image

Die ausführbare Datei heißt [ibexpert.exe]. Normalerweise ist im [Start]-Menü eine Verknüpfung vorhanden:

Image

Nach dem Start zeigt IBExpert das folgende Fenster an:

Image

Verwenden Sie die Option [ -Datenbank/Datenbank erstellen], um eine Datenbank zu erstellen:

Server
kann [local] oder [remote] sein. In diesem Fall befindet sich unser Server auf demselben Rechner wie [IBExpert]. Wir wählen daher [local]
Datenbank
Verwenden Sie die Schaltfläche [Ordner] im Dropdown-Menü, um die Datenbankdatei auszuwählen. Firebird speichert die gesamte Datenbank in einer einzigen Datei. Dies ist einer seiner Vorteile. Sie können die Datenbank von einem Computer auf einen anderen übertragen, indem Sie die Datei einfach kopieren. Die Endung [.gdb] wird automatisch hinzugefügt.
Benutzername
SYSDBA ist der Standardadministrator für aktuelle Firebird-Distributionen
Passwort
masterkey ist das Passwort für den SYSDBA-Administrator in aktuellen Firebird-Distributionen
Dialekt
Der zu verwendende SQL-Dialekt
Datenbank registrieren
Wenn dieses Kontrollkästchen aktiviert ist, zeigt IBExpert nach der Erstellung der Datenbank einen Link zu dieser an

Wenn beim Klicken auf die Schaltfläche [OK] zum Erstellen der Datenbank die folgende Warnung angezeigt wird:

Image

bedeutet dies, dass Sie Firebird noch nicht gestartet haben. Starten Sie es. Es erscheint ein neues Fenster:

Image

Zeichensatz
Zu verwendender Zeichensatz. Obwohl der Screenshot oben keine Informationen anzeigt, wird empfohlen, den Zeichensatz [ISO-8859-1] aus der Dropdown-Liste auszuwählen, da dieser die Verwendung von lateinischen Zeichen mit Akzenten ermöglicht.
Serverversion
[IBExpert] unterstützt verschiedene von Interbase abgeleitete DBMS. Wählen Sie die Version von Firebird aus, die Sie installiert haben:

Sobald Sie dieses neue Fenster durch Klicken auf [Registrieren] bestätigen, sehen Sie das folgende Ergebnis:

Image

Um auf die von Ihnen erstellte Datenbank zuzugreifen, doppelklicken Sie einfach auf den entsprechenden Link. IBExpert zeigt dann eine Baumansicht an, über die Sie Zugriff auf die Eigenschaften der Datenbank haben:

Image

2.4. Erstellen einer Datentabelle

Erstellen wir eine Tabelle. Klicken Sie mit der rechten Maustaste auf [Tabellen] (siehe Fenster oben) und wählen Sie die Option [Neue Tabelle]. Dadurch öffnet sich das Fenster zur Definition der Tabelleneigenschaften:

Beginnen wir damit, die Tabelle über das Eingabefeld [1] mit dem Namen [ARTICLES] zu versehen:

Verwenden Sie das Eingabefeld [2], um einen Primärschlüssel [ID] zu definieren:

Ein Feld wird durch Doppelklick auf das Feld [PK] (Primärschlüssel) zum Primärschlüssel gemacht. Fügen wir nun über die Schaltfläche oben [3] Felder hinzu:

Image

Solange wir unsere Definition nicht „kompiliert“ haben, wird die Tabelle nicht erstellt. Verwenden Sie die Schaltfläche [Compile] oben, um die Tabellendefinition abzuschließen. IBExpert bereitet die SQL-Abfragen zur Erstellung der Tabelle vor und bittet um Bestätigung:

Image

Interessanterweise zeigt IBExpert die ausgeführten SQL-Abfragen an. So können Sie sowohl die SQL-Sprache als auch eventuell verwendete proprietäre SQL-Dialekte erlernen. Die Schaltfläche [Commit] bestätigt die aktuelle Transaktion, während [Rollback] sie abbricht. Hier bestätigen wir sie durch Klicken auf [Commit]. Sobald dies geschehen ist, fügt IBExpert die erstellte Tabelle zu unserer Datenbankstruktur hinzu:

Image

Durch Doppelklicken auf die Tabelle können wir auf ihre Eigenschaften zugreifen:

Image

Über das Fenster [Constraints] können wir der Tabelle neue Integritätsbeschränkungen hinzufügen. Öffnen wir es:

Image

Wir sehen die von uns erstellte Primärschlüsselbeschränkung. Wir können weitere Beschränkungen hinzufügen:

  • Fremdschlüssel [Foreign Keys]
  • Feldintegritätsbeschränkungen [Checks]
  • Eindeutigkeitsbeschränkungen für Felder [Uniques]

Lassen Sie uns Folgendes festlegen:

  • die Felder [ID, PRICE, CURRENTSTOCK, MINIMUMSTOCK] müssen >0 sein
  • das Feld [NAME] darf nicht leer sein und muss eindeutig sein

Öffnen Sie das Fenster [Prüfungen] und klicken Sie mit der rechten Maustaste in den Bereich für die Definition von Einschränkungen, um eine neue Einschränkung hinzuzufügen:

Image

Definieren wir nun die gewünschten Einschränkungen:

Image

Beachten Sie oben, dass die Einschränkung [NAME<>''] zwei einfache Anführungszeichen verwendet, keine doppelten. Kompilieren Sie diese Einschränkungen über die Schaltfläche [Compile] oben:

Image

Erneut beweist IBExpert seine Benutzerfreundlichkeit, indem es die ausgeführten SQL-Abfragen anzeigt. Wechseln wir nun zum Bereich [Constraints/Unique], um festzulegen, dass der Name eindeutig sein muss. Das bedeutet, dass derselbe Name nicht zweimal in der Tabelle vorkommen darf.

Image

Definieren wir die Einschränkung:

Image

Anschließend kompilieren wir sie. Sobald dies erledigt ist, öffnen Sie den Bereich [DDL] (Data Definition Language) für die Tabelle [ARTICLES]:

Image

In diesem Fenster wird der SQL-Code zur Erstellung der Tabelle mit all ihren Einschränkungen angezeigt. Sie können diesen Code in einem Skript speichern, um ihn später auszuführen:

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. Daten in eine Tabelle einfügen

Nun ist es an der Zeit, Daten in die Tabelle [ARTICLES] einzugeben. Verwenden Sie dazu das [Daten]-Fenster:

Image

Die Eingabe der Daten erfolgt durch Doppelklick auf die Eingabefelder der einzelnen Zeilen in der Tabelle. Eine neue Zeile wird über die Schaltfläche [+] hinzugefügt, eine Zeile über die Schaltfläche [-] gelöscht. Diese Vorgänge werden innerhalb einer Transaktion ausgeführt, die über die Schaltfläche [Transaktion festschreiben] (siehe oben) bestätigt wird. Ohne diese Bestätigung gehen die Daten verloren.

2.6. Der [IB-Expert] SQL-Editor

Die SQL (Structured Query Language) ermöglicht es einem Benutzer:

  1. Tabellen anzulegen, indem er den Datentyp, den sie speichern sollen, und die Einschränkungen, denen die Daten genügen müssen, festlegt
  1. Daten in diese einzufügen
  2. bestimmte Daten zu ändern
  3. andere Daten zu löschen
  4. die Daten zum Abrufen von Informationen zu verwenden
  5. ...

Mit IBExpert können Benutzer die Vorgänge 1 bis 4 grafisch ausführen. Das haben wir gerade gesehen. Wenn die Datenbank viele Tabellen mit jeweils Hunderten von Zeilen enthält, benötigen wir Informationen, die visuell nur schwer zu erfassen sind. Nehmen wir zum Beispiel an, dass ein Online-Shop monatlich Tausende von Kunden hat. Alle Käufe werden in einer Datenbank erfasst. Nach sechs Monaten stellt sich heraus, dass das Produkt „X“ fehlerhaft ist. Der Shop möchte alle Käufer kontaktieren, damit sie das Produkt gegen einen kostenlosen Umtausch zurückgeben können. Wie lassen sich die Adressen dieser Käufer ermitteln?

  1. Man könnte alle Tabellen manuell durchgehen und nach diesen Käufern suchen. Das würde einige Stunden dauern.
  2. Wir können eine SQL-Abfrage ausführen, die innerhalb von Sekunden eine Liste dieser Personen liefert

SQL ist immer dann nützlich, wenn

  • die Datenmenge in den Tabellen groß ist
  • viele Tabellen miteinander verknüpft sind
  • die abzurufenden Informationen über mehrere Tabellen verteilt sind
  • ...

Wir stellen nun den SQL-Editor von IBExpert vor. Sie können ihn über die Option [Extras/SQL-Editor] oder durch Drücken der Taste [F12] aufrufen:

Image

Dadurch erhalten Sie Zugriff auf einen erweiterten SQL-Abfrage-Editor, in dem Sie Abfragen ausführen können. Geben wir eine Abfrage ein:

Image

Führen Sie die SQL-Abfrage über die Schaltfläche [Ausführen] oben aus. Sie erhalten das folgende Ergebnis:

Image

Oben zeigt die Registerkarte [Ergebnisse] die Ergebnistabelle für die SQL-Anweisung [Select] an. Um einen neuen SQL-Befehl auszuführen, kehren Sie einfach zur Registerkarte [Bearbeiten] zurück. Dort sehen Sie dann die SQL-Anweisung, die ausgeführt wurde.

Image

Mehrere Schaltflächen in der Symbolleiste sind nützlich:

  • Mit der Schaltfläche [Neue Abfrage] können Sie zu einer neuen SQL-Abfrage übergehen:

Image

Dadurch wird eine leere Bearbeitungsseite angezeigt:

Image

Sie können dann eine neue SQL-Anweisung eingeben:

Image

und diese ausführen:

Image

Kehren wir zur Registerkarte [Bearbeiten] zurück. Die verschiedenen ausgeführten SQL-Anweisungen werden von [IB-xpert] gespeichert. Mit der Schaltfläche [Vorherige Abfrage] können Sie zu einer zuvor ausgeführten SQL-Anweisung zurückkehren:

Image

Sie gelangen dann zur vorherigen Abfrage zurück:

Image

Mit der Schaltfläche [Nächste Abfrage] gelangen Sie zur nächsten SQL-Anweisung:

Image

Anschließend wird die nächste SQL-Anweisung in der Liste der gespeicherten SQL-Anweisungen angezeigt:

Image

Mit der Schaltfläche [Abfrage löschen] können Sie eine SQL-Anweisung aus der Liste der gespeicherten Anweisungen löschen:

Image

Mit der Schaltfläche [Aktuelle Abfrage löschen] löschen Sie den Inhalt des Editors für die angezeigte SQL-Abfrage:

Image

Mit der Schaltfläche [Commit] können Sie die an der Datenbank vorgenommenen Änderungen dauerhaft speichern:

Image

Mit der Schaltfläche [RollBack] können Sie die seit dem letzten [Commit] an der Datenbank vorgenommenen Änderungen rückgängig machen. Wenn seit der Verbindung mit der Datenbank kein [Commit] durchgeführt wurde, werden die seit dieser Verbindung vorgenommenen Änderungen rückgängig gemacht.

Image

Schauen wir uns ein Beispiel an. Fügen wir eine neue Zeile in die Tabelle ein:

Image

Die SQL-Anweisung wird ausgeführt, aber es wird nichts angezeigt. Wir wissen nicht, ob die Einfügung stattgefunden hat. Um das herauszufinden, führen wir die folgende SQL-Anweisung aus [Neue Abfrage]:

Image

Wir erhalten das folgende Ergebnis:

Image

Die Zeile wurde tatsächlich eingefügt. Sehen wir uns nun den Inhalt der Tabelle auf andere Weise an. Doppelklicken Sie im Datenbank-Explorer auf die Tabelle [ARTICLES]:

Image

Wir erhalten die folgende Tabelle:

Image

Mit der Schaltfläche mit dem Pfeil oben können Sie die Tabelle aktualisieren. Nach der Aktualisierung ändert sich die obige Tabelle nicht. Es scheint, als wäre die neue Zeile nicht eingefügt worden. Kehren wir zum SQL-Editor (F12) zurück und führen wir die SQL-Anweisung mit der Schaltfläche [Commit] aus:

Image

Sobald dies erledigt ist, kehren wir zur Tabelle [ARTICLES] zurück. Wir können sehen, dass sich nichts geändert hat, selbst wenn wir die Schaltfläche [Refresh] verwenden:

Image

Öffnen Sie oben die Registerkarte [Fields] und kehren Sie dann zur Registerkarte [Data] zurück. Diesmal wird die eingefügte Zeile korrekt angezeigt:

Image

Wenn die Ausführung der verschiedenen SQL-Anweisungen beginnt, eröffnet der Editor eine sogenannte Transaktion in der Datenbank. Die durch diese SQL-Anweisungen im SQL-Editor vorgenommenen Änderungen sind nur so lange sichtbar, wie Sie sich im selben SQL-Editor befinden (Sie können mehrere Instanzen öffnen). Es ist, als würde der SQL-Editor nicht an der eigentlichen Datenbank arbeiten, sondern an einer eigenen Kopie davon. In Wirklichkeit funktioniert das nicht ganz so, aber diese Analogie kann uns helfen, das Konzept einer Transaktion zu verstehen. Alle Änderungen, die während einer Transaktion an der Kopie vorgenommen werden, sind erst dann in der eigentlichen Datenbank sichtbar, wenn sie über [Transaktion festschreiben] festgeschrieben wurden. Die aktuelle Transaktion wird dann beendet, und eine neue Transaktion beginnt.

Änderungen, die während einer Transaktion vorgenommen wurden, können durch einen Vorgang namens [Rollback] rückgängig gemacht werden. Versuchen wir folgendes Experiment. Starten wir eine neue Transaktion (einfach die aktuelle Transaktion [Commit]) mit der folgenden SQL-Anweisung:

Image

Führen wir diesen Befehl aus, der alle Zeilen aus der Tabelle [ARTICLES] löscht, und führen wir anschließend [New Query] mit dem folgenden neuen SQL-Befehl aus:

Image

Wir erhalten das folgende Ergebnis:

Image

Alle Zeilen wurden gelöscht. Denken Sie daran, dass dies an einer Kopie der Tabelle [ARTICLES] durchgeführt wurde. Um dies zu überprüfen, doppelklicken Sie unten auf die Tabelle [ARTICLES]:

Image

und sehen Sie sich die Registerkarte [Daten] an:

Image

Selbst wenn wir die Schaltfläche [Aktualisieren] verwenden oder zur Registerkarte [Felder] und dann wieder zurück zur Registerkarte [Daten] wechseln, bleibt der obige Inhalt unverändert. Dies wurde bereits erklärt. Wir befinden uns in einer anderen Transaktion, die mit einer eigenen Kopie arbeitet. Kehren wir nun zum SQL-Editor (F12) zurück und verwenden die Schaltfläche [RollBack], um die vorgenommenen Zeilenlöschungen rückgängig zu machen:

Image

Wir werden um Bestätigung gebeten:

Image

Bestätigen wir. Der SQL-Editor bestätigt, dass die Änderungen rückgängig gemacht wurden:

Image

Führen wir die obige SQL-Abfrage zur Überprüfung noch einmal aus. Die zuvor gelöschten Zeilen sind nun wieder vorhanden:

Image

Der Vorgang [Rollback] hat die Kopie, an der der SQL-Editor arbeitet, in den Zustand zurückversetzt, in dem sie sich zu Beginn der Transaktion befand.